题目:
给定两个正整数,计算它们的差,计算结果可能为负数。
输入格式:
共两行,每行包含一个整数。
输出格式:
共一行,包含所求的差。
数据范围:
1 ≤ 整数长度 ≤ 10^5
输入样例:
32
11
输出样例:
21
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
string s1,s2;
int a[N],b[N],c[N];
int n,len1,len2,len3;
void add(int a[],int b[],int c[],int &x)
{
for(int i = 1;i <= x;i ++)
{
c[i] += a[i] + b[i];
c[i + 1] = c[i] / 10;
c[i] %= 10;
}
if(c[x + 1]) x ++;
}
void reduce(int a[],int b[],int c[],int &x)
{
for(int i = 1;i <= x;i ++)
{
c[i] += a[i] - b[i];
if(c[i] < 0)
{
c[i + 1] --;
c[i] += 10;
}
}
while(!c[x]&&x > 1) x --;
}
bool compare(string s1,string s2)
{
if(s1.size() > s2.size()) return true;
if(s1.size() < s2.size()) return false;
for(int i = 0;i < s1.size();i ++)
if(s1[i] > s2[i]) return true;
else if(s1[i] < s2[i]) return false;
return true;
}
int main()
{
cin>>s1>>s2;
len1 = s1.size();
len2 = s2.size();
len3 = max(len1,len2);
for(int i = s1.size() - 1,j = 1;i >= 0;i --,j ++)
a[j] = s1[i] - '0';
for(int i = s2.size() - 1,j = 1;i >= 0;i --,j ++)
b[j] = s2[i] - '0';
if(compare(s1,s2)) reduce(a,b,c,len3);
else
{
cout<<"-";
reduce(b,a,c,len3);
}
for(int i = len3;i >= 1;i --)
cout<<c[i];
}