11:大整数减法
总时间限制: 1000ms 内存限制: 65536kB
描述
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
样例输入
9999999999999999999999999999999999999
9999999999999
样例输出
9999999999999999999999990000000000000
源码
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<math.h>
#include<cstdlib>
#include<iomanip>
using namespace std;//大整数减法,跟上一道大整数加法异曲同工
int main() {
string str;
int a[210],b[210],result[210]={0},deposit[210]={0};
int a_len=0,b_len=0,len,i;
cin>>str;
for(i=0;i<str.length();i++){//反转的时候把0去掉,虽然不影响计算结果,但是看上去总归不习惯
if(str[i]!='0') break;
}
for(;i<str.length();i++)
a[a_len++]=str[i]-48;//字符转整数
reverse(a,a+a_len);/*测试数组
for(i=0;i<a_len;i++)
cout<<a[i];
cout<<endl;*/
cin>>str;
for(i=0;i<str.length();i++){
if(str[i]!='0') break;
}
for(;i<str.length();i++)
b[b_len++]=str[i]-48;
reverse(b,b+b_len);/*测试数组
for(i=0;i<b_len;i++)
cout<<b[i];
cout<<endl;*/
if(a_len==0&&b_len==0){
cout<<"0";
return 0;
}
len=max(a_len,b_len);
for(i=0;i<len;i++){
result[i]=a[i]-b[i]-deposit[i];
if(result[i]<0){
result[i]+=10;//这个借位是+10,刚开始我是取反,脑袋抽筋了,小学题都不会了
deposit[i+1]=1;//下一位-1,因为借位了
}
}
reverse(result,result+len);//这个反转的目的是为了防止输出的时候前几位是0
for(i=0;i<len;i++)
if(result[i]!='0') break;//非零才开始输出
for(;i<len;i++){
cout<<result[i];
}
cout<<endl;
return 0;
}
来源:CSDN
作者:够霸才强
链接:https://blog.csdn.net/goubacaiqiang/article/details/103934563