【题目描述】
求两个大的正整数相减的差。
【输入】
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
一行,即所求的差。
【输入样例】
9999999999999999999999999999999999999
9999999999999
【输出样例】
9999999999999999999999990000000000000
#include <iostream>
#include <cstring>
using namespace std;
char s1[205],s2[205],s3[205];
int a[205],b[205],c[205];
int flag = 0;
//比较两数大小
bool compare(char s1[],char s2[]){
int u=strlen(s1),v=strlen(s2);
if(u!=v) return u>v;
for(int i=0;i<u;i++){
if(s1[i] != s2[i]) return s1[i]>s2[i];
}
return true;
}
int main(){
int la,lb,lc;
scanf("%s",s1);//读入两个数
scanf("%s",s2);
if(!compare(s1,s2)){//比较大小
flag = 1;
strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
}
la = strlen(s1);//获取两个数的长度
lb = strlen(s2);
for(int i=0;i<la;i++)//将两个数转存数组里
a[la-i] = s1[i] - '0';
for(int i=0;i<lb;i++)
b[lb-i] = s2[i] - '0';
lc = max(la,lb);
for(int i=1;i<=lc;i++){//逐位相减
if(a[i] < b[i]){
a[i+1]--;
a[i]+=10;
}
c[i] = a[i] - b[i];
}
while(lc>0 && c[lc]==0) lc--;//去除前导零;
if(flag == 1) printf("-");//输出负号
for(int i=lc;i>0;i--){
printf("%d",c[i]);
}
return 0;
}