codevs 3115 高精度练习--减法
题目大意:
给定两个数a、b , 算出a-b;(a和b的位数各不超过500位)
思路:
模拟减法:
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int ans[501] = {0};
int sub(string a, string b)// a is the big number, b is smaller.
{
int m = a.length()-1;
int n = b.length()-1;
int k = 0;
for(int i = m; i >= 0; i--)
{
if(n >= 0)
{
if(a[i] >= b[n])
ans[k++] = int(a[i]-b[n]);
else
{
ans[k++] = int(a[i]+10-b[n]);
int tmp = i-1;
while(a[tmp] == '0')
{
a[tmp] = '9';
tmp--;
}
a[tmp] = char(a[tmp]-1);
}
n--;
}
else
{
ans[k++] = int(a[i] - '0');
}
}
return k;
}
int main()
{
string a,b;
cin >> a >> b;
int k;
if(a.length() < b.length() || (a.length() == b.length() && a < b))
{
k = sub(b,a)-1;
cout << "-";
}
else if(a.length() > b.length() || (a.length() == b.length() && a > b))
{
k = sub(a,b)-1;
}
else
{
cout << "0";
}
while(ans[k] == 0)
k--;
for(int i = k; i >= 0; i--)
{
cout << ans[i];
}
return 0;
}

浙公网安备 33010602011771号