描述
计算两个非负整数之差
输入
从键盘上输入两个非负整数,每个数占一行,每个数的位数不超过240.
输出
输出只有一行为两个数之差。
样例
输入
12 13
输出
-1
#include <iostream>
#include <algorithm>
using namespace std;
/*
高精度减法:
第一步:判断正负,如果S1比S2对应的整数小,结果为负,交换si S2
第二步:将两个字符串,逆序存入2个整数输出测试
第三步:从左至右,逐位相减,不够借位
第四步:从右向左,逆序输出 string s1,s2;
*/
int len1,len2,len;
int a[205],b[205],c[205];
void sub(){
for(int i=0; i<len; i++){
if(a[i]<b[i]){
a[i+1]--;
a[i]=a[i]+10;
}
c[i]=a[i]-b[i];
}
while(c[len]==0 && len!=0) len--;
return;
}
bool check(string s1, string s2){
if(len1>len2) return 0;
if(len1<len2) return 1;
for(int i=0; i<len; i++){
if(s1[i]<s2[i]) return 1;
if(s1[i]>s2[i]) return 0;
}
return 0;
}
int main(){
string s1,s2;
cin>>s1>>s2;
len1=s1.size();
len2=s2.size();
len=max(len1,len2);
if(check(s1,s2)){
cout<<'-';
swap(s1,s2);
swap(len1,len2);
}
for(int i=0; i<len1; i++){
a[len1-i-1]=s1[i]-'0';
}
for(int i=0; i<len2; i++){
b[len2-i-1]=s2[i]-'0';
}
sub();
while(len>=0) cout<<c[len--];
return 0;
}