gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:49:00 25 4
gpt4 key购买 nike

我认为我没有将以下伪代码正确翻译为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com