今天给大家讲一道信奥必考题,那就是~~~~~高精度减法。
高精度减法
时间限制:1秒 内存限制:128M
题目描述
输入两个整数a和b,输出这两个整数的差。a和b都不超过5000位。
输入描述
输入包括两行,第一行为一个非负整数a,
第二行为一个非负整数b。两个整数都不超过5000位,两数的最高位都不是0。
输出描述
输出一行,表示a - b的值
样例
输入
2 1
输出
1
解决如下啦!
#include<cmath>
#include<cstdio>
#include<string>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[1005],b[1003],c[1005];
string s1,s2;
cin>>s1>>s2;
if(s1.size() <s2.size() ||s1.size() ==s2.size()&&s1<s2){
cout<<"-";
swap(s1,s2);
}
for( int i=s1.size()-1,j=0;i>=0;i--,j++){//转置
a[j]=s1[i]-'0';
}
for( int i=s2.size()-1,j=0;i>=0;i--,j++){//转置
b[j]=s2[i]-'0';
}
int len=max(s1.size() ,s2.size() ),jiewei=0;
for(int i=0;i<s1.size() ;i++){
c[i]=a[i]-b[i]-jiewei;
if(c[i]<0){
jiewei=1;
c[i]+=10;
}
else{
jiewei=0;
}
}
int pos=len-1;
while(c[pos]==0&&pos>0){
pos--;
}
for(int i=pos;i>=0;i--){
cout<<c[i];
}
return 0;
}
运行如下:
2
1
1
--------------------------------
Process exited after 3.172 seconds with return value 0
请按任意键继续. . .