小學生數學
很多小學生在學習加法時,發現“進位”特別容易出錯。你的任務是計算兩個數在相加時需要多少次進位。你編制的程序應當可以連續處理多組數據,直到讀到兩個0(這是輸入結束標記)。樣例:
輸入
123 456
555 555
123 594
0 0輸出:
0
3
1
首先感謝 garbageMan 的代碼,下面代碼全部引用自他的 C語言初學者代碼中的常見錯誤與瑕疵(4) 。 僅做少量修改。
先說下為何再寫一遍,以為我想看看我自己寫的代碼到底是什么個樣子。其次,向人家學習學習。
大家如果不喜歡的話,多罵幾句,先行謝過。
下面代碼是依據 garbageMan 的評論對代碼進行修改后的結果。
/*
出處:http://www.cnblogs.com/pmer/p/3428526.html
*/
#include <stdio.h>
#define clear_stdin() do { } while (fgetc(stdin) != '\n')
unsigned count_carry_for_add(unsigned a, unsigned b);
int get_numbers(unsigned *a, unsigned *b);
int main( void )
{
unsigned a = 0u;
unsigned b = 0u;
while (get_numbers(&a, &b) == 0){
printf("%u\n", count_carry_for_add(a, b));
}
return 0;
}
int get_numbers(unsigned *a, unsigned *b)
{
while ( puts("Please input Two Unsigned Integer(0 0 for exit):")
, scanf("%u%u", a, b) != 2){
fprintf(stderr, "Input invalid!!\n");
clear_stdin();
}
if (*a == 0u && *b == 0u){
return 1;
}
return 0;
}
unsigned count_carry_for_add(unsigned a, unsigned b)
{
unsigned count = 0u ;//進位次數
unsigned carry = 0u ;//進位
do {
carry = ((a%10u + b%10u) + carry) / 10u ;
if (carry > 0 ){
++count;
}
a /= 10u;
b /= 10u;
} while (a != 0 || b != 0);
return count;
}
總結:
注意程序主體的模塊化
