7-41 大数的乘法 (10 分)
输入一个大正整数和一个非负整数,求它们的积。
输入格式:
测试数据有多组,处理到文件尾。每组测试输入1个大正整数A(位数不会超过1000)和一个非负整数B(int范围)。
输出格式:
对于每组测试,输出A与B的乘积。
输入样例:
1 1 123 100 12345678910 8 123456789101234567891012345678910 7
输出样例:
1 12300 98765431280 864197523708641975237086419752370
出处:
ZJUTOJ 1027
说明:
原题的B是一位数,本题修改为int范围内的整数
#include<iostream> using namespace std; int main(){ string a,b; while(cin>>a>>b){ int res[10001]; memset(res,0,sizeof(res)); for(int i=0; i<a.size();i++){ for(int j=0;j<b.size();j++){ res[i+j]+=(a[i]-'0')*(b[j] - '0'); } } if(res[0]>=10) cout<<res[0]/10; for(int i=a+b-1;i>0;i--){ if(res[i]>=10){ res[i-1]+=res[i]/10; res[i]%=10; } } for(int i=0;i< a+b-1;i++){ cout<<res[i]; }cout<<endl; } return 0; }
#include<iostream> using namespace std; int main(){ int n,t=0;string s1,s2; cin>>n; for(int i=1;i<=n;i++){ printf("Case %d:",i); cin>>s1>>s2; cout<<endl<<s1<<" + "<<s2<<" = "; int m=max(s1.size(),s2.size()); int a[m]={0},b[m]={0},c[m]={0}; for(int j=s1.size()-1;j>=0;j--) a[s1.size()-1-j]=s1[j]-'0'; for(int j=s2.size()-1;j>=0;j--) b[s2.size()-1-j]=s2[j]-'0'; int t=0; for(int j=0;j<m;j++){ t+=a[j]+b[j]; c[j]=t%10; t=t/10; } if(t)cout<<t; for(int j=m-1;j>=0;j--) cout<<c[j]; cout<<endl; if(i!=n) {cout<<endl;} } return 0; }
#include<iostream> #include<vector> using namespace std; int main(){ int n,cnt=0; cin>>n; for(int i=1;i<=n;i++){ string a,b; cin>>a>>b; printf("Case %d:\n",i); cout<<a<<" + "<<b<<" = "; vector<int> A,B,C; for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0'); for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0'); for(int i=0,t=0;i<A.size()||i<B.size()||t;i++){ if(i<A.size()) t+=A[i]; if(i<B.size()) t+=B[i]; C.push_back(t%10); t/=10; } for(int i=C.size()-1;i>=0;i--) cout<<C[i]; cnt++; if(cnt==n)break; cout<<endl<<endl; } return 0; }