小学生数学
很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个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; }
总结:
注意程序主体的模块化