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;
    }
    

     总结:

    注意程序主体的模块化

  • 相关阅读:
    MySQL 一般模糊查询的几种用法
    MySQL插入中文数据报错
    BeanUtils.populate 的作用
    分分钟搞定 JSP 技术
    margin-top相对谁的问题
    常用汉字的Unicode码表
    从InputStream到String_写成函数
    Http请求和响应应用
    发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
    导出到excel
  • 原文地址:https://www.cnblogs.com/playerc/p/3431584.html
Copyright © 2011-2022 走看看