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


浙公网安备 33010602011771号