2013年12月21日 星期六

[ACM] UVa 10035 : Primary Arithmetic

想法步驟
第一步:
想說要用整數還是用陣列去算,題目有提到數字最多10位數,所以最多幾十億,開long long解決。

第二步:
利用迴圈跟計數算出題目給的數字是幾位數。

第三步:
利用%限制兩個數字的位數並相加,如有進位,記錄一次。


  1. /****************************************
  2. Uva 10035 - Primary Arithmetic
  3. Aurhor:  CHEN YU YUAN
  4. Language: C++
  5. ****************************************/
  6. #include <iostream>
  7. using namespace std;
  8. //計算位數
  9. int digits(unsigned long long d)
  10. {
  11.         int len = 0;
  12.         while (>= 1)
  13.         {
  14.                 d /= 10;
  15.                 len++;
  16.         }
  17.         return len;
  18. }
  19. int main()
  20. {
  21.         unsigned long long num1, num2;
  22.         while (cin >> num1 >> num2 )
  23.         {
  24.                 if (num1 == 0 && num2 ==0)
  25.                         break;
  26.         //取位數大的
  27.                 int digit1, digit2,max;
  28.                 digit1 = digits(num1);
  29.                 digit2 = digits(num2);
  30.                 max = (digit1 > digit2) ? digit1 : digit2;
  31.         //計算進位
  32.                 int devbase = 10, counter = 0;
  33.                 for (int i=0; i<max; i++)
  34.                 {
  35.                         //從個位數開始相加,如果大於等於基數10的倍數,表示有進位
  36.                         if ((num1 % devbase + num2 % devbase) >= devbase)
  37.                                 counter++;
  38.                         devbase *= 10;
  39.                 }
  40.        
  41.         //output
  42.                 if (counter == 0)
  43.                         cout << "No carry operation." << endl;
  44.                 else if (counter == 1)
  45.                         cout << counter << " carry operation." << endl;
  46.                 else
  47.                         cout << counter << " carry operations." << endl;       
  48.         }
  49. }

沒有留言:

張貼留言