小學生數學
很多小學生在學習加法時,發現“進位”特別容易出錯。你的任務是計算兩個數在相加時需要多少次進位。你編制的程序應當可以連續處理多組數據,直到讀到兩個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; }
總結:
注意程序主體的模塊化