注意进位问题 还是能处理好的
#include <iostream> #include<cstdio> #include <vector> #include <sstream> #include <string> #include <cstring> #include <cmath> #include <stack> #include <algorithm> using namespace std; const int MAXL=505; char al[MAXL]; char bl[MAXL]; int a[MAXL]; int b[MAXL]; int c[MAXL*2]={0}; int stra; int strb; int ll; /*void output() { for(int i=0;i<stra;i++) { cout<<a[i]<<" "; } cout<<endl; for(int i=0;i<strb;i++) { cout<<b[i]<<" "; } cout<<endl; }*/ void input() { scanf("%s",&al); getchar(); scanf("%s",&bl); stra=strlen(al); strb=strlen(bl); } void rever() { for(int i=0;i<stra;i++) { a[i]=al[stra-1-i]-'0';/// } for(int i=0;i<strb;i++) { b[i]=bl[strb-1-i]-'0';/// } //output(); } void multi() { ll=(stra+1)+(strb+1)+1; int temp=0; int i,j; for(i=0;i<stra;i++) { for(j=0;j<strb;j++) { temp=a[i]*b[j]; c[i+j]+=temp%10;///这里为什么不能加判定条件? c[i+j+1]+=temp/10; } } /* for(int i=0;i<=ll;++i) cout<<c[i]<<" "; cout<<endl;*/ for(int i=0;i<=ll;i++) { if(c[i]>9999) c[i+4]+=c[i]/10000; c[i]%=10000; if(c[i]>999) c[i+3]+=c[i]/1000; c[i]%=1000; if(c[i]>99) c[i+2]+=c[i]/100; c[i]%=100; if(c[i]>9) c[i+1]+=c[i]/10; c[i]%=10; } /* for(int i=0;i<=ll;++i) cout<<c[i]<<" "; cout<<endl;*/ } void min0() { ///ll代表最后一位的位数 for(ll;ll>0;ll--) { if(c[ll]==0) ll--; else break; } for(int i=ll;i>=0;i--) { cout<<c[i]; } cout<<endl; } int main() { input(); rever(); multi(); min0(); return 0; }