题解 UVA10035 【Primary Arithmetic】

· · 题解

题意简述:

给出两个无符号整数a,ba,b\le10^{10}),输出这两个数相加的进位次数。有多组测试数据。

思路:

使用类似高精度的方法模拟加法,在模拟时统计进位次数。

详见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;
}