算法篇——小学生算数

  来源:《算法导论入门经典》例题5.2.1

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

  样例输入:123 456

  样例输出:0

  样例输入:555 545

  样例输出:3

  样例输入:991 11

  样例输出:2

  分析:注意int的上限约是2000000000,可以保存所有9位整数,因此可以用整型int来保存输入。每次把a和b分别模10就能获取它的最低位,原理同全加器

  源码

#include<stdio.h>

int student_add()
{
    int a,b,i,c=0,n=0;                //c表示进位位,n表示进位次数
    while(scanf("%d %d",&a,&b)==2)
    {
        if(!a && !b)    return;       //读入两个0,输入结束
        while(a || b)                 //只要a,b不全为0,对应位相加就可能有进位(不要忽视来自低位的进位)
        {
            c = (a%10) + (b%10) + c > 9 ? 1:0; //原理同全加器(加数、被加数与低位的进位数为输入,和数与进位为输出)
            n+=c;        //进位次数统计
            a/=10;       //向右移位
            b/=10;
        }
        printf("%d\n",n);
        n=0;
    }
    return 0;
}
时间: 2024-08-29 00:21:28

算法篇——小学生算数的相关文章

深度学习word2vec笔记之算法篇

深度学习word2vec笔记之算法篇 声明:  本文转自推酷中的一篇博文http://www.tuicool.com/articles/fmuyamf,若有错误望海涵 前言 在看word2vec的资料的时候,经常会被叫去看那几篇论文,而那几篇论文也没有系统地说明word2vec的具体原理和算法,所以老衲就斗胆整理了一个笔记,希望能帮助各位尽快理解word2vec的基本原理,避免浪费时间. 当然如果已经了解了,就随便看看得了. 一. CBOW加层次的网络结构与使用说明 Word2vec总共有两种类

插入排序——一步一步算法篇

插入排序 算法思想:将待排序的数据放在一个数组中,并设置一个中间量m,用来存储每次插入比较的元素. (1) a[1]自成1个有序区,无序区为a[2..n]; (2) 从i=2起直至i=n为止,将a[i]放在恰当的位置,使a[1..i]数据序列有序; ① m:=a[i]; ② 将m与前i-1个数比较 , j:=i-1; while(x #include<iostream> #include<cstdio> #include<cstring> #include<str

冒泡排序——一步一步算法篇

基本思想:依次比较相邻的两个数,并两两交换,使大(或小)的数不停向前推进,以此类推-- 由于在排序过程中总是大数往前,小数往后,相当气泡上升,所以叫冒泡排序. #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int main() { int n,a[1000],i,j,k,m; cin>>n; memset(a,

有赞搜索引擎实践(算法篇)

## 1. 搜索算法总体架构 在上篇文章(工程篇)中, 我们介绍了有赞搜索引擎的基本框架. 搜索引擎主要3个部件构成. 第一, hadoop集群, 用于生成大规模搜索和实时索引; 第二,  ElasticSearch集群, 提供分布式搜索方案; 第三, 高级搜索集群, 用于提供商业搜索的特殊功能. 商业电商搜索由于搜索的特殊性, 独立的ElasticSearch集群是无法满足多样的算法需求的, 我们在搜索的各个部件上都有相应的算法插件, 用于构建商业电商搜索引擎的算法体系. ### 1.1 索引

LDA工程实践之算法篇之(一)算法实现正确性验证(转)

研究生二年级实习(2010年5月)开始,一直跟着王益(yiwang)和靳志辉(rickjin)学习LDA,包括对算法的理解.并行化和应用等等.毕业后进入了腾讯公司,也一直在从事相关工作,后边还在yiwang带领下,与孙振龙.严浩等一起实现了一套大规模并行的LDA训练系统——Peacock.受rick影响,决定把自己对LDA工程实践方面的一些理解整理出来,分享给大家,其中可能有一些疏漏和错误,还请批评指正. Rickjin在<LDA数学八卦>[1]一文中已经对LDA的数学模型以及基本算法介绍得比

[Java 泥水匠] Java Components 之二:算法篇之项目实践中的位运算符(有你不懂的

作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583]http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_AonqzL0rpdQAjjqlHQQ 如果我的帮到了你,是否乐意捐助一下或请一杯啤酒也好呢?有你支持,干的更好~ 点这参与众筹 我的支付宝:13958686678 2.1 前言 自从上篇[Java 泥水

数据结构和算法篇——散列表

之前讲过博主在某网买了一个数据结构与算法的课程.本篇散列表是其中的三节.散列表应该是 Java 程序员常用并且最先碰到的一个数据结构了吧?Java 的 HashMap 就是对散列表的实现.可以说散列表算是一个比较基础.比较好理解(抛开需要缜密设计的哈希函数不说).比较好用(查询时间复杂度O(1))的一种数据结构.本篇在此分享这三节的总结笔记. 1)散列表开篇介绍:https://www.cnblogs.com/christmad/p/11519055.html 2)如何打造一个工业级的散列表:h

简单理解算法篇--摊还分析

摊还分析是用来评价程序中的一个操作序列的平均代价,有时可能某个操作的代价特别高,但总体上来看也并非那么糟糕,可以形象的理解为把高代价的操作“分摊”到其他操作上去了,要求的就是均匀分摊后的平均代价. 摊还分析有三种常用的技术:聚合分析,核算法,势能法. 首先看个例子,现在有三种操作,push(s),pop(s),mutlipop(s,k),push(s),统称为栈操作. push(s)每次只能压一个数据,所以规定操作的代价为1,pop(s)每次只能弹一个数据,所以也规定操作的代价为1,而mutli

排序算法篇--之直接插入排序

直接插入排序是将一个记录插入到已经排好序的有序表中,从而得到一个新的记录数加1的有序表. 下面的代码中会先假设数组的第一个元素是已经拍好序的有序表,然后从第二个元素开始遍历剩下的元素. 所以呢,第一个for循环是遍历待插入的元素,第二个for循环是遍历被插入的有序表,并将待插入元素与有序表的元素比较,将待插入元素插在合适位置. 1 <?php 2 $arr = array(9,8,7,6,5,0,3,2,1,4); 3 4 /** 5 * 返回通过插入排序算法重新排序后的数组 6 * @para