#include<bits/stdc++.h> using namespace std; int a[2000],b[2000],c[4001]; int k1=0,k2=0,k3=0; int main() { string a1,b1; cin>>a1>>b1; for(int i=a1.size()-1;i>=0;i--) { a[k1]=a1[i]-'0'; k1++; } for(int i=a1.size()-1;i>=0;i--) { b[k2]=b1[i]-'0'; k2++; } for(int i=0;i<k1;i++) { for(int j=0;j<k2;j++) { c[i+j]+=a[i]*b[j];//使用a的一位乘上b的每一位,再将结果放入c中; } } int len=k1+k2;//乘积的最大值不超过两数位数之和 for(int i=0;i<=len;i++) { c[i+1]+=c[i]/10;//处理进位 c[i]%=10; } while(c[len]==0) { len--;//消除前导零 } for(int i=len;i>=0;i--) { cout<<c[i]; } } 哪里有问题
时间: 2024-03-13 09:42:24 浏览: 32
素数&合数&约数和.docx
这段代码在处理进位时存在问题,因为c数组的最后一位可能会有进位,但是当前代码没有对最高位的进位进行处理。应该在处理进位时,加上如下代码:
```c++
if(c[len+1]>0){
len++;
c[len]=c[len+1]/10;
c[len+1]%=10;
}
```
这样可以保证最高位的进位得到正确处理。
此外,代码中定义的变量k3没有被使用,可以删除。
阅读全文