11:大整数减法
总时间限制:
1000ms
内存限制:
65536kB
描述
求两个大的正整数相减的差。
输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
输出
一行,即所求的差。
样例输入
9999999999999999999999999999999999999
9999999999999
样例输出
9999999999999999999999990000000000000
分析及代码[作者:靳海]:
#include<iostream>
using namespace std;
const int L = 11000;
string sub(string a, string b)
{
string ans;
int na[L] = {0}, nb[L] = {0};
int la = a.size(), lb = b.size();
for(int i = 0; i < la; i++)
na[la-1-i] = a[i] - '0';
for(int i = 0; i < lb; i++)
nb[lb-1-i] = b[i] - '0';
int lmax = la > lb ? la : lb;
for(int i = 0; i < lmax; i++)
{
na[i] -= nb[i];
if(na[i] < 0)
na[i] += 10, na[i+1]--;
}
while(!na[--lmax]&&lmax>0);
lmax++;
for(int i = lmax - 1; i >= 0; i--)
ans += na[i] + '0';
return ans;
}
int main(){
string a, b;
while(cin >> a >> b)
{
if(a.length() < b.length())
cout << "-" << sub(b, a) << endl;
else if(a.length() == b.length())
{
if(a < b)
cout << "-" << sub(b, a) << endl;
else
cout << sub(a, b) << endl;
}
else
cout << sub(a, b) << endl;
}
return 0;
}