重写:小学生数学

小学生数学 很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个0(这是输入结束标记)。

样例:

输入 123 456 555 555 123 594 0 0

输出:0 3 1

首先感谢 garbageMan 的代码,下面代码全部引用自他的 C语言初学者代码中的常见错误与瑕疵(4) 。 仅做少量修改。

先说下为何再写一遍,以为我想看看我自己写的代码到底是什么个样子。其次,向人家学习学习。

大家如果不喜欢的话,多骂几句,先行谢过。

下面代码是依据 garbageMan 的评论对代码进行修改后的结果。

/* 出处: */ #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;},失败是成功的亲娘,没有失败哪来的成功呢?诺贝尔如果不经历千万次的失败,

重写:小学生数学

相关文章:

你感兴趣的文章:

标签云: