Q10035: Primary Arithmetic
在小學時我們都做過加法的運算,就是把2個整數靠右對齊然後,由右至左一位一位相加。如果相加的結果大於等於10就有進位(carry)的情況出現。你的任務就是要判斷2個整數相加時產生了幾次進位的情況。這將幫助小學老師分析加法題目的難度。
Input
每一列測試資料有2個正整數,長度均小於10位。最後一列有2個0代表輸入結束。
Output
每列測試資料輸出該2數相加時產生多少次進位,請參考Sample Output。注意進位超過1次時operation有加s
Sample Input
123 456 555 555 123 594 0 0
Sample Output
No carry operation. 3 carry operations. 1 carry operation.
以上題目翻譯:
http://luckycat.kshs.kh.edu.tw/homework/q10035.htm
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <stdio.h>
#include <ctype.h>
#include <cmath>
using namespace std;
int main() {
// 10035 - Primary Arithmetic
string n1, n2;//first num, second num
while(cin >> n1 >> n2)
{
if(n1 == "0" && n2 == "0")
{
break;
}
else
{
int n1_len = n1.size(); //n1的長度
int n2_len = n2.size(); //n2的長度
int c = 0;//紀錄進位
int result = 0; //進位數量
while(n1_len != 0 && n2_len != 0)
{
int x; //相加結果
int i_n1 = n1[n1_len-1]-'0';
int i_n2 = n2[n2_len-1]-'0';
x = i_n1 + i_n2 + c;
c = 0;
if(x >= 10)
{
c = floor(x/10);
result++;
}
n1_len--;
n2_len--;
}
//如果兩數字長度不同,也要繼續相加計算進位
if(n1_len > n2_len)
{
while(n1_len != 0)
{
int x;
x = n1[n1_len-n2_len-1]-'0' + c;
c = 0;
if( x >= 10)
{
c = floor(x/10);
result++;
}
n1_len--;
}
}
else if(n2_len > n1_len)
{
while(n2_len != 0)
{
int x;
x = n2[n2_len-n1_len-1]-'0' + c;
c = 0;
if(x >= 10)
{
c = floor(x/10);
result++;
}
n2_len--;
}
}
//輸出
if(result == 0)
{
cout << "No carry operation." << endl;
}
else if(result == 1)
{
cout << result << " carry operation." << endl;
}
else
{
cout << result << " carry operations." << endl;
}
}
}
return 0;
}
沒有留言:
張貼留言