题目描述
高精度减法
输入输出格式
输入格式:两个整数a,b(第二个可能比第一个大)
输出格式:结果(是负数要输出负号)
输入输出样例
输入样例#1:
2 1
输出样例#1:
1
说明
20%数据a,b在long long范围内
100%数据0<a,b<=10的10000次方
#include<iostream>
#include <cstdio>
#include <ctype.h>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=10010;
char s1[1000000],s2[1000000];
char res[1000000];
bool cmp(string a,string b)
{
if (a.size() < b.size()) return true; //当a的位数比b小时,a比b小
if (a.size() > b.size()) return false; //当a的位数比b大时,a比b大
for (int i = 0; i < a.size(); ++i) //剩余情况就是a的位数与b相同
{
if (a[i] > b[i]) return false; //逐位比较
if (b[i] > a[i]) return true;
}
return false;
}
bool cmp1(string a,string b)
{
for(int i=0;i<a.size();i++)
if(a[i]!=b[i])
return 0;
return 1;
}
void jian(char *a,char *b)
{
int lena=strlen(a);
int lenb=strlen(b);
if(lena!=lenb)
for(int i=lenb;i<lena;i++)
b[i]='0';
reverse(a,a+lena);
reverse(b,b+lenb);
int c=0;
for(int i=0;i<lena;i++)
{
int t=(a[i]-'0')-(b[i]-'0')-c;
c=(t<0);
res[i]=(t+10*c)+'0';
}
res[lena]='\0';
while(lena>1&&a[lena-1]=='0')
a[--lena]='\0';
reverse(res,res+lena);
}
int main()
{
cin>>s1;
cin>>s2;
if(cmp(s1,s2))
{
swap(s1,s2);
cout<<"-";
}
if(cmp1(s1,s2))
{
cout<<0<<endl;
return 0;
}
jian(s1,s2);
cout<<res<<endl;
return 0;
}