1. 问题描述

之前写过一些 Raptor 的程序,里面经常会直接或间接遇到数字分解的要求。比如一个数 num = 1234567,把这个数字逆序输出;判断一个数是否为水仙花数,153=1^3 + 5^3 + 3^3,需要提取各位数字;或者 求一个正整数(位数不固定)的各位数字之和;判断一个数是否为回文数 等等。现在把这个需求提取出来,写成一篇博客,供后续相关需求引用参考。(上面的博客链接是跟数字分解相关的博客,有的写于本篇博客之前,有的写于本篇博客之后,有需求的可以参考相关内容。)

2. 算法分析

我们利用数组和求余运算来实现数字分解任务。Raptor 里面,"REM, MOD, %" 这三个都可以当做求余运数算符号,本例中,我们用 MOD 来指代求余数运算符号。利用求余运算,提取个位数字,然后存储在数组中。

比如 num = 1234567,数组为 a,循环变量 i=1。记一个临时变量 n=num,因为 num 可能会在后面用到,如果直接改变 num,后面就不知道原始的 num 值是多少了。然后进行如下循环操作(注意每一步完了 n, a 和 i 是如何变化的):

  • n MOD 10 = 7, a[i] = 7, n = floor(n/10) = 123456, i = i + 1,此时 i=2;
  • n MOD 10 = 6, a[i] = 6, n = floor(n/10) = 12345, i = i + 1,此时 i=3;
  • n MOD 10 = 5, a[i] = 5, n = floor(n/10) = 1234, i = i + 1,此时 i=4;
  • n MOD 10 = 4, a[i] = 4, n = floor(n/10) = 123, i = i + 1,此时 i=5;
  • n MOD 10 = 3, a[i] = 3, n = floor(n/10) = 12, i = i + 1,此时 i=6;
  • n MOD 10 = 2, a[i] = 2, n = floor(n/10) = 1, i = i + 1,此时 i=7;
  • n MOD 10 = 1, a[i] = 1, n = floor(n/10) = 0, i = i + 1,此时 i=8。

到这里,n 已经等于0了,已经完成了数字分解任务。通过上述分析可以发现,循环结束的条件就是临时变量 n = 0。通过把一些多次循环中不变的操作整合到循环里面,这样流程图的核心就有了,下面直接给出流程图。

3. 流程图

因为此篇博客仅介绍数字分解任务,为后续博客奠定基础,所以只列举数字分解任务的流程图,以免影响阅读和理解。

4. 测试结果

num = 1234567,通过左边的变量栏,可以发现已经成功把数字的各个位数存储到数组中去了。数字的位数可以通过 length_of(a) 来获取,本例中 num = 1234567,所以 length_of(a) = 7。

Raptor-数字分解相关推荐

  1. 汇编语言练习_1_数字分解_显示

    文章目录 环境 1.Bochs虚拟机 2.VirtualBox 工具 1.notepad++ 2.nasm 思路 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: 第七步: 解析 1.第二行 ...

  2. 数字分解的套路与陷阱

    我发现这个数字分解,在各种题目之中屡屡出现,于是就想着来写写这篇文章 数字分解呢,简单来说,就是把一个数的每一位给它分开,然后进行操作 有的同学(就是我 )一看这个东西啊,就说,诶,我们整个strin ...

  3. XDOJ综合题 数字分解排序

    XDOJ - 数字分解排序 时间限制:1S 内存限制:1000Kb 问题描述: 输入一个9位以内的正整数n,按数值从高到低的顺序输出n的各位数字. 输入说明: 一个正整数n(0<n<100 ...

  4. python中如何将一个数字分解成一个列表

    将数字分解成列表 问题如下 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中.举例:get_digits(12345) ==> [1, 2, 3, 4, 5] ...

  5. java运算符与数字分解,看完对java更加有信心了(主除以和取余的理解)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 运算符: 1.赋值运算符:= 2.算术运算符:+ ,-  ,* (乘), / (除),%(取余),++(自增) ,--(自减) 3.关 ...

  6. 递归回溯--数字分解java代码

    /*  * 5.数字分解    * * 6  *  6   *  5+1   *  4+2   *  4+1+1   *  3+3   *  3+2+1   *  3+1+1+1   *  2+2+2 ...

  7. XDOJ 综合题 数字分解排序

    标题     数字分解排序 类别     综合 时间限制     1S 内存限制     1000Kb 问题描述     输入一个9位以内的正整数n,按数值从高到低的顺序输出n的各位数字. 输入说明  ...

  8. 输入n(1-10之间数字),将数字分解显示,如6可以显示为6,5+1,4+2,4+1+1.....

    输入n(1-10之间数字),将数字分解显示,如6可以显示为6,5+1,4+2,4+1+1..... #include <stdio.h> int c[10]; void fun(int n ...

  9. 招银网络科技笔试题:数字分解

    之前都在leetcode刷题,有些文章直接保存到上面去了,这是今天做招银的测试题中的一个,先说一下题目的大概意思. 给定一个整数,要求输出关于这个整数的各种数字相加的组合: 1:0种 2:0种 3:3 ...

  10. 【算法设计与分析】将数字分解为n个数字之和

    [例]数字6可分解为 6 5+1 4+2        4+1+1 3+3        3+2+1         3+1+1+1 2+2+2    2+2+1+1    2+1+1+1+1 1+1 ...

最新文章

  1. 条件分支结构c语言,决定分支的条件一般是什么表达?
  2. 机柜服务器选择学问大!
  3. 什么是REST?以及RESTful的实现(转)
  4. 非线性回归模型(part1)--神经网络
  5. 【康复训练】[国家集训队] calc【dp】【拉格朗日插值】
  6. Jquery操作DOM节点
  7. Ubuntu源码安装Tomcat7
  8. python画图代码大全-Python科学画图代码分享
  9. 不同发行版linux介绍
  10. Cannot modify header information的解决方法
  11. IOS快速集成下拉上拉刷新
  12. vue播放flv格式视频
  13. 一维卷积神经网络应用,二维卷积神经网络原理
  14. Qt的http下载的Demo
  15. 喷射计算机故障,电子燃油喷射系统常见故障
  16. c语言程序设计对称数,对称数 问题
  17. 技术水平真的很重要!技术详细介绍
  18. C++之sstream
  19. php后门检测工具,phpStudy后门如何检测和修复
  20. 12Cr2Mo1R(H)化学成分

热门文章

  1. 第四次计算革命孕育“数字经济体”
  2. Poland seeks to calm row with Germany over WWII war repa industrielle Kommunikation rations
  3. 固定资产管理系统能帮助企业做哪些工作?
  4. 近期微信登录10005报错,解决办法
  5. 多元函数概念和偏导数
  6. 关键词推广怎么做比较好?抖音宣传做关键词推广有哪些好的方法
  7. sqlplus之runstats
  8. 产品分析报告—Soul
  9. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
  10. 【python办公自动化(19)】利用python发送邮件(每天向邮箱发送一条定时新闻)