//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;