c - 将乘法算法从伪代码转换为 C

标签 c algorithm pseudocode

我认为我没有将以下伪代码正确翻译为 C:

multiply(a[1..p], b[1..q], base)                           // Operands containing rightmost digits at index 1                         
product = [1..p+q]                                         //Allocate space for result                 
for b_i = 1 to q                                           // for all digits in b                                   
  carry = 0
  for a_i = 1 to p                                        //for all digits in a                               
    product[a_i + b_i - 1] += carry + a[a_i] * b[b_i]
    carry = product[a_i + b_i - 1] / base
    product[a_i + b_i - 1] = product[a_i + b_i - 1] mod base
  product[b_i + p] += carry                              // last digit comes from final carry               
return product

该伪代码包含“长乘法”(学校教授的乘法方法)所需的算法,我尝试将其翻译为 C,但没有将其变成函数,并且确实使用了一些测试值 [ 1..p] 和 b[1..q]。

C 代码:

 int a [2] = { 0, 3 };
 int b [2] = { 0, 2 };

 int product [4];

 int b_i;
 int a_i;
 int product_i;

 for ( b_i = 0; b_i < 2; b_i++) {
    int carry = 0;
    for ( a_i = 0; a_i < 2; a_i++) {
            product[a_i + b_i - 1] += carry + ( a[a_i] * b[b_i] );
            carry = product [a_i + b_i - 1] / 10;
            product[ a_i + b_i - 1] = product[a_i + b_i -1] % 10;
    }
    product[b_i + 2] += carry;
 }
for (product_i = 0; product_i < 4; product_i++ ) {
    printf("%d", product[product_i] );
}

所选数字( 30 和 20 )显示正确答案,但它并不适用于所有数字。

最佳答案

这有效:

 int product [4] = {0, 0, 0, 0};
for ( b_i = 2; b_i > 0; b_i--) {
int carry = 0;
for ( a_i = 2; a_i > 0; a_i--) {
        product[a_i + b_i - 1] += carry + ( a[a_i-1] * b[b_i-1] );
        carry = product [a_i + b_i - 1] / 10;
        product[ a_i + b_i - 1] = product[a_i + b_i -1] % 10;
   }
product[b_i - 1] += carry;
}

这可以避免指向 a[0] 和 b[0] 下面

关于c - 将乘法算法从伪代码转换为 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42754399/

相关文章:

c - 目录条目和链表

最短前缀匹配算法?

algorithm - Moravec角点检测器的伪代码

algorithm - 大O记法——循环的疑惑

c - 如何区分两位数(65)和字符 ('a' )?

c - 不存在的目录中的多个定义

c - 使用指针切换字符

ruby - 使用 Ruby on Rails 计算 bool 值的平均值

sql - 可以加速这个算法吗?

graph-theory - 出队时将节点标记为在 BFS 上访问过