题解 UVA10035 【Primary Arithmetic】
atarashiTLE · · 题解
题意简述:
给出两个无符号整数
思路:
使用类似高精度的方法模拟加法,在模拟时统计进位次数。
详见code:
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string a, b, c;
void turn(string &a)
{
string f;
int k;
k = a.size();
for (int i = 0; i < k; i++)
f += a[k - i - 1];
a = f;
}
int main()
{
cin >> a;
cin >> b;
while (a != "0" || b != "0")
{
c.clear();
int k, x = 0, ans = 0;
turn(a);
turn(b);
if (a.size() >= b.size())
k = a.size();
else
k = b.size();
if (k == 0)
{
k++;
}
for (int i = 0; i < k; i++)
{
int al = 0, bl = 0, cl;
if (i < a.size())
al = a[i] - '0';
if (i < b.size())
bl = b[i] - '0';
cl = al + bl + x;
x = cl / 10;
if (x)
ans++;
c += char(cl % 10 + '0');
}
if (x)
c += x + '0';
int i = c.size() - 1;
while (c[i] == '0' && i > 1)
i--;
if (ans == 0)
cout << "No carry operation." << endl;
else if (ans == 1)
cout << 1 << " carry operation." << endl;
else
cout << ans << " carry operations." << endl;
cin >> a;
cin >> b;
}
return 0;
}