UVA一星題(3)10035 Primary Arithmetic
2 min readSep 26, 2019
對於剛開始寫程式的我很難的題目呢~現在來看就沒有那麼難了,只要有抓到技巧就行了!
題目大意如下:
題目會給兩個數字,要你判斷相加後總共會有幾次的進位(carry)
用 0 0作為結束符號
解題步驟:
- 因為數入的數字不一定是三位數,有可能是多位數,所以用陣列去存取。
- 存取方法,使用%+/(先取餘數在除以自己),就可以順理把數字拆開了
- 分別存到不同陣列後,再講兩者相加,相加後再加他們除以10,就會得到carry number。
- 最重要的部分是carry number要繼續加到下一次的相加中。
(ex: 8 + 1如果剛好他前面有進一位,所以這次的計算也會再進一位)
簡單程式碼如下:
int count = 0, k1 = 0, k2 = 0;
int arr1[10] = {0};
int arr2[10] = {0}; // seperate the number
//因為不知道他會輸入幾位數,所以用 while比較方便,k1,k2也可以順便計算大小
while(num1 != 0)
{
arr1[k1] = num1 % 10;
num1 /= 10;
k1++;
}
while(num2 != 0)
{
arr2[k2] = num2 % 10;
num2 /= 10;
k2++;
}
// carry num
int carry = 0;
for(int i = 0; i < max; ++i)
{
//carry 要記得加回去
carry = carry + arr1[i] + arr2[i];
if(carry / 10 != 0)
count++;
carry /= 10;
}
這題還算簡單的~只要知道怎麼拆開數字,就能迎刃而解!