写一个C或C++的程序,用于计算两个大数的乘积(大数位数不超过1000位)

个人代码及注释如下,计算过程是模仿笔算乘法的过程,拜托哪位帮忙看看为什么计算结果是错的:
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[]){
string a = "";
string b = "";
int a_array[1000] = {0}; //存储输入数字和计算结果的数组
int b_array[1000] = {0};
int c_array[2000] = {0};
int i = 0;
int j = 0;
int k = 0;
int a_length = 0; //计算两个输入数字的最高有效位时使用
int b_length = 0;
int a_abovezero = 1; //判断正负时使用,两者不同则结果为负
int b_abovezero = 1;

cin >> a;
cin >> b;

j = 999; //将输入的数字存入数组中
a_length = a.length();
for(i=a.length()-1; i>=0; i--){
switch(a[i]){
case '0': a_array[j] = 0; j--; break;
case '1': a_array[j] = 1; j--; break;
case '2': a_array[j] = 2; j--; break;
case '3': a_array[j] = 3; j--; break;
case '4': a_array[j] = 4; j--; break;
case '5': a_array[j] = 5; j--; break;
case '6': a_array[j] = 6; j--; break;
case '7': a_array[j] = 7; j--; break;
case '8': a_array[j] = 8; j--; break;
case '9': a_array[j] = 9; j--; break;
case '-': a_abovezero = 0; break;
}
}
j = 999; //将输入的数字存入数组中
b_length = b.length();
for(i=b.length()-1; i>=0; i--){
switch(b[i]){
case '0': b_array[j] = 0; j--; break;
case '1': b_array[j] = 1; j--; break;
case '2': b_array[j] = 2; j--; break;
case '3': b_array[j] = 3; j--; break;
case '4': b_array[j] = 4; j--; break;
case '5': b_array[j] = 5; j--; break;
case '6': b_array[j] = 6; j--; break;
case '7': b_array[j] = 7; j--; break;
case '8': b_array[j] = 8; j--; break;
case '9': b_array[j] = 9; j--; break;
case '-': b_abovezero = 0; break;
}
}

for(i=999; i>=1000-b_length; i--){ //计算结果存在数组c_array中,进位稍后统一处理
k = i + 1000;
for(j=999; j>=1000-a_length; j--){ //1000-a_length代表a最高有效位在数组中的位置
c_array[k] += a_array[j] * b_array[i];
k--;
}
}

j = 0; //处理进位
for(i=1999; i>=0; i--){
k = c_array[i] + j;
j = k / 10;
c_array[i] = k % 10;
}

for(i=0; i<2000; i++){ //略过结果数组中前面无效的0
if(c_array[i] == 0){
continue;
} else {
break;
}
}
if(a_abovezero != b_abovezero){ //判断结果正负
cout << "-";
}
for(; i<2000; i++){ //输出结果
cout << c_array[i];
}
cout << endl;

return 1;
}

第1个回答  2012-03-16
没有发现你的代码有什么错误,运行都是正确的。若你那里运行有错,请找找与代码无关的其他原因。
第2个回答  2012-03-15
j = 0; //处理进位
for(i=1999; i>=0; i--){
k = c_array[i] + j;
j = k / 10;
c_array[i] = k % 10;
}
这一段不对 处理进位应该是k = c_array[i],c_array[i - 1] += k /10, c_array[i] = k % 10l追问

结果还不对~~~~貌似不是这儿错了,那个j就是用来表示来自低位的进位的,初始值设为零

追答

我测试没问题呀。。

本回答被提问者采纳
第3个回答  2012-03-15
buhui

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网