zoukankan      html  css  js  c++  java
  • 重写:小学生数学

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

     总结:

    注意程序主体的模块化

  • 相关阅读:
    这些简单优化能让你的Win10流畅很多
    win7系统登录界面背景怎么修改?
    如何在win7下通过easyBCD引导安装Ubuntu14.04
    为什么我的电脑打不开便签?
    打开Word为什么会出现感叹号呢???
    图像变换原理
    运行
    php、前端开发(网站建设)环境搭建
    zend studio面板功能
    zend studio汉化
  • 原文地址:https://www.cnblogs.com/playerc/p/3431584.html
Copyright © 2011-2022 走看看