//1.读入字符串 //scanf //可以同一行,中间用空格隔开,也可以两行 #include<iostream> #include<cstdio> #include<cstring> using namespace std; char s1[1010],s2[1010]; int main(){ scanf(%s%s,s1,s2); int lena=strlen(s1); int lenb=strlen(s2); ... } //gets //只能两行 #include<iostream> #include<cstdio> #include<cstring> using namespace std; char s1[1010],s2[1010]; int main(){ gets(s1);gets(s2); int lena=strlen(s1); int lenb=strlen(s2); ... } //cin //可以同一行,中间用空格隔开,也可两行 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(){ string s1,s2; cin>>s1>>s2; int lena=strlen(s1); int lenb=strlen(s2); ... } //2.存入数组 //注意倒叙 1~len -> 低位~高位 for(int i=1;i<=lena;i++){ a[i]=s[lena-i]-'0';//字符串最后一位是'0' } //3.加法 //(1)模拟手工计算,设置一个进位标记m int m=0; lenc=max(lena,lenb); for(int i=1;i<=lenc;i++){ c[i]=(m+a[i]+b[i])%10; m=(m+a[i]+b[i])/10; } if(m==1){ lenc++; c[lenc]=1; } //(2)先计算后处理进位 for(int i=1;i<=lenc;i++) c[i]=a[i]+b[i]; for(int i=1;i<=lenc;i++){ c[i+1]=c[i+1]+c[i]/10; c[i]=c[i]%10l } if(c[lenc+1]==1) lenc++; //(2)++ 去掉c数组 lena>lenb for(int i=1;i<=lena;i++) a[i]=a[i]+b[i]; for(int i=1;i<=lena;i++){ a[i+1]=a[i+1]+a[i]/10; a[i]=a[i]%10; } if(a[lena+1]==1) lena++; //4减法 //(1)借位 for(int i=1;i<=lena;i++){ if(a[i]<b[i]){ a[i+1]--; a[i]+=10; } a[i]-=b[i]; } //(2)输出 while(a[lena]==0&&lena>1) lena--; for(int i=lena;i>=1;i--) cout<<a[i]; cout<<endl; //(3)谁减谁的问题 if(strcmp(s1,s2)==0) {cout<<0<<endl;return 0;} if(lena<lenb||lena==lenb&&strcmp(s1,s2)<0){ strcpy(s3,s1); strcpy(s1,s2); strcpy(s2,s3); swap(lena,lenb); cout<<'-'; } //5乘法 for(int i=1;i<=lena;i++) for(int j=1;j<=lenb;j++) c[i*j-1]=a[i]*b[j]; int lenc=lena+lenb-1; for(int i=1;i<=lenc;i++){ c[i+1]=c[i+1]+c[i]/10; c[i]%=10; } if(c[lenc+1]>0) lenc++; //6位运算结果的输出 for(int i=lenc;i>=1;i--) cout<<c[i]<<" "; cout<<endl;