5 条题解
-
1
#include<bits/stdc++.h> using namespace std; char a1[9999],b1[9999],c1[9999];//用字符数组保存 int a[9999],b[9999],c[9999];//用于计算的整形数组,a、b为字符数组逆序转换而来,c为最终的答案 int main(){ cin>>a1>>b1;//输入数据 int la=strlen(a1),lb=strlen(b1);//计算字符数组长度 if((la<lb)||(la==lb&&strcmp(a1,b1)<0)){//判断大小 cout<<"-"; strcpy(c1,a1); strcpy(a1,b1); strcpy(b1,c1);//交换 } la=strlen(a1); lb=strlen(b1);//重新定义长度 for(int i=0;i<la;i++) a[la-i]=a1[i]-'0';//逆序保存 for(int i=0;i<lb;i++) b[lb-i]=b1[i]-'0';//注意,这里数组的长度为1-la/lb int lc=1;//表示计算的位置 while(lc<=la||lc<=lb){//相减及处理借位 if(a[lc]<b[lc]){//如果不够减 a[lc]+=10; a[lc+1]--;//向上一位借1 } c[lc]=a[lc]-b[lc]; lc++; } while(c[lc]==0&&lc>1) lc--;//去掉前面多余的0,本身是0就保存 for(int i=lc;i>=1;i--) cout<<c[i];//打印 return 0; }
-
1
#include<bits/stdc++.h> using namespace std; char a1[100000],b1[100000];//用来保存两个加数 int a[1000],b[1000],c[1000];//用于计算的整型数组 //a,b为字符数组逆序转换而来,c为最后的结果 int main(){ cin>>a1>>b1;//输入数据 int la=strlen(a1),lb=strlen(b1);//记录a1和b1的长度 //如果a比b小,那么就先输出一个负号,同时交换a1和b1的值 if(la<lb||(la==lb&&strcmp(a1,b1)<0)){//如果a1的长度小于b1,或者2个长度一样时,strcmp函数比较起来a1要小 cout<<"-";//输出负号 char c1[100000]; strcpy(c1,a1); strcpy(a1,b1); strcpy(b1,c1);//交换a1和a2 } la=strlen(a1),lb=strlen(b1); for(int i=0;i<la;i++) a[la-i]=a1[i]-'0';//逆序保存 for(int i=0;i<lb;i++) b[lb-i]=b1[i]-'0';//注意:这里整形数组的长度是从1到lb int lc=1;//表示计算的位置 while(lc<=la||lc<=lb){//相减 if(a[lc]<b[lc]){//如果不够减 a[lc]+=10; a[lc+1]--;//向上一位借1 } c[lc]=a[lc]-b[lc]; lc++; } while(c[lc]==0&&lc>1) lc--;//去掉最前面的0,如果本身就是0则保留一个0 for(int i=lc;i>=1;i--) cout<<c[i];//输出答案 return 0; }
-
0
using namespace std; int a[1000],b[1000],c[1000];//用于计算的整型数组 char a1[100000],b1[100000];//用来保存两个减数 //a,b为字符数组逆序转换而来,c为最后的结果 int main(){ cin>>a1>>b1;//输入数据 int la=strlen(a1);//记录a1的长度 int lb=strlen(b1);//记录b1的长度 //如果a比b小,那么就先输出一个负号,同时交换a1和b1的值 if(la<lb||(la==lb&&strcmp(a1,b1)<0)){//如果a1的长度小于b1,或者2个长度一样时,strcmp函数比较起来a1要小 cout<<"-";//输出负号 char c1[100000]; strcpy(c1,a1); strcpy(a1,b1); strcpy(b1,c1);//交换a1和a2 } la=strlen(a1); lb=strlen(b1);//不要忘记重新计算一次长度 for(int i=0;i<la;i++) a[la-i]=a1[i]-'0';//逆序保存 for(int i=0;i<lb;i++) b[lb-i]=b1[i]-'0';//注意:这里整形数组的长度是从1到lb int lc=1;//c数组用来计算结果,lc表示从第一位开始计算 while(lc<=la||lc<=lb){//两个减数相减 if(a[lc]<b[lc]){//如果不够减 a[lc]+=10; a[lc+1]--;//向上一位借1 } c[lc]=a[lc]-b[lc]; lc++; } while(c[lc]==0&&lc>1) lc--;//去掉前面多余的0 for(int i=lc;i>=1;i--) cout<<c[i];//因为是逆序存放的数组,所以逆序输出答案 return 0; }
-
0
#include<bits/stdc++.h> using namespace std; char A[10001],B[10001],D[10001]; int a[10001],b[10001],c[100001]; int main() { cin>>A>>B; int lena=strlen(A); int lenb=strlen(B); if(lenb>lena||lena==lenb&&strcmp(A,B)<0) { strcpy(D,A); strcpy(A,B); strcpy(B,D); cout<<"-"; swap(lena,lenb); } int x=0; int lenc; for(int i=0;i<=lena-1;i++) { a[i]=A[lena-1-i]-'0'; } for(int i=0;i<=lenb-1;i++) { b[i]=B[lenb-1-i]-'0'; } int i; for(i=0;i<lena;i++) { x=a[i]<b[i]; a[i]+=10*x; a[i+1]-=x; c[i]=a[i]-b[i]; } lenc=i; while(c[lenc]==0&&lenc>0) { lenc--; } for(i=lenc;i>=0;i--) { cout<<c[i]; } return 0; }
-
0
#include<bits/stdc++.h> using namespace std; char A[10001],B[10001],D[10001]; int a[10001],b[10001],c[100001]; int main(){ cin>>A>>B; int lena=strlen(A); int lenb=strlen(B); if(lenb>lena||lena==lenb&&strcmp(A,B)<0){ strcpy(D,A); strcpy(A,B); strcpy(B,D); cout<<"-"; swap(lena,lenb); } int x=0; int lenc; for(int i=0;i<=lena-1;i++){ a[i]=A[lena-1-i]-'0'; } for(int i=0;i<=lenb-1;i++){ b[i]=B[lenb-1-i]-'0'; } int i; for(i=0;i<lena;i++){ x=a[i]<b[i]; a[i]+=10*x; a[i+1]-=x; c[i]=a[i]-b[i]; } lenc=i; while(c[lenc]==0&&lenc>0){ lenc--; } for(i=lenc;i>=0;i--){ cout<<c[i]; } return 0; }
- 1
信息
- ID
- 268
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- 递交数
- 220
- 已通过
- 61
- 上传者