重寫:小學生數學


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

 總結:

注意程序主體的模塊化

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM