#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-04-23 18:24:16 浏览: 76
万能头文件#include“bitsstdc++.h”.pdf
可以对代码进行如下改进:
1. 数组大小应该根据输入的字符串长度进行动态分配,而不是固定为2000和4001。
2. 处理进位的方式应该将进位的数值加到下一位上,即c[i+1]+=c[i]/10,同时应该将当前位的数值更新为c[i]%=10。
3. 消除前导零的方式可以在最后输出结果时,从高位开始输出,遇到首个非零数字即可停止输出。
4. 对于输入字符串的合法性判断,可以使用isdigit()函数判断每个字符是否为数字。
5. 对于负数的情况,可以在输入时判断第一个字符是否为负号,如果是则将其去掉,并将结果标记为负数,在输出时再加上负号。
改进后的代码如下:
阅读全文