循环中的取余操作 0%0

  • 题目
  • 总结

题目

p 你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。

如输入1234,则输出:
yi er san si

注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
fu er san si yi

输入格式:
一个整数,范围是[-100000,100000]。

输出格式:
表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

输入样例:
-30

输出样例:
fu san ling

这个题的重点就是正序输出整数的每一位!

如何输出整数的每一位呢?

x=12345
12345/10000->1 取第一位
12345%10000->2345 下一个数
10000/10->1000 用来取下一个数的第一位
2345/1000->2
2345%1000->345
1000/10->100
345/100->3
345%100->45
100/10->10
45/10->4
45%10->5
10/10->1
5/1->5
5%1->5
1/10=0

具体步骤:

  1. 求出整数的位数 (12345 -> 10000)

这一步要注意不能直接对num进行操作,会影响后续对num的操作,这一步的唯一目的就是求出mask=10000.

int a = num; // 将整数赋值给一个新的变量
while(a > 9){a = a / 10;mask = mask * 10;
}
  1. 通过/取整数的第一位 (12345/10000->1 )
  2. 通过%取下一个整数(12345%10000->2345)

2 ,3两步是不断重复的过程,需要特别注意的是这个循环的终止条件,这里的终止条件千万不能是num != 0,当输入整数是10, 100, 1000时会出现问题,1000%1000=0,这会直接跳出循环,导致这类输入只会输出首位数字!

do{num1 = num / mask;printf("%s", str[num1]);num = num % mask;mask = mask / 10;} while(num>=0);

接下来思考: 为什么终止条件为num>=0,这样会一直循环到num=0mask=0,此时num%mask 就是 0%0,这在C语言中是不合法的,因此会直接跳出循环。

完整代码如下:

#include<stdio.h>
#include<math.h>int main(){char str[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};int num, num1, mask=1;scanf("%d:", &num);if (num < 0){printf("fu ");}num = abs(num);int a = num;while(a > 9){a = a / 10;mask = mask * 10;}do{num1 = num / mask;printf("%s", str[num1]);num = num % mask;mask = mask / 10;if (num > 0){printf(" ");}} while(num>=0);return 0;
}

这正结束循环的方式是有问题的,在循环体结束后面,添加任何语句都不会执行,可能是因为前面提到的0%0的问题,能结束循环并不是因为满足循环终止条件num>=0,而是循环中遇到了0%0的情况,导致系统报错中断,所以在循环体后面的语句会不起作用。
希望看到这点的大佬能给我指点一下!!!

#include<stdio.h>int main(){int num = 10, mask=10;do{printf("%d%%%d\n", num, mask);num = num % mask;mask = mask / 10;        } while(num>=0);printf("---111---");return 0;
}

结果如下:

并没有输出---111---

总结

  1. 正序取出整数每一位的值可以通过/%交替进行;
  2. 注意变量的作用域;
  3. 循环的终止条件,循环终止可能并非满足终止条件,而是出现异常?

小解的C语言笔记:循环中的取余操作 0%0相关推荐

  1. lua4.0中实现% 取余操作

    相信大家对%取余很熟悉,lua5.0以上也完美的支持了,但是我最新的项目服务器使用%却莫名的报错,最后终于找到了罪魁祸首, #define LUA_VERSION "Lua 4.0" ...

  2. R语言把dataframe中的NA值替换为0

    R语言把dataframe中的NA值替换为0 目录 R语言把dataframe中的NA值替换为0 缺失值替换 方法总结 缺失值替换

  3. html 连续发送数据库,不要在循环中对数据库进行操作.htm

    不要在循环中对数据库进行操作 不要在循环中对数据库进行操作 性能非常低下,应改为用IN查询 示例: 1.在循环中查询数据库,增加gv_title属性(性能低下) foreach ($res['data ...

  4. python中的取余运算符是_python取余运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python中对负数求余的计算方法和求幂运算注意点python中对负数求余的计算 ...

  5. java里面取余什么意思_java中%是取余运算符。

    [单选题] [单选题] [判断题]Hadoop存储系统HDFS的文件是分块存储,每个文件块默认大小为32MB [单选题]I think I am old enough and strong enoug ...

  6. ArrayDeque中的取余

    Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字).而当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque:既然Queue只是一个接口, ...

  7. Python 中的取余与取整操作

    %: 对于正数的取余操作,跟其他的语言没有什么区别,在这里重点说一下负数的取余: print (-5%3)#输出 1#仅有一负号时,在负无穷到-5之间找到一个数能被3整数,最接近于-5的数是-6,所以 ...

  8. python中如何取余_python如何实现取余操作的方法

    python如何实现取余操作的方法 发布时间:2020-08-17 09:36:53 来源:亿速云 阅读:68 作者:小新 这篇文章主要介绍python如何实现取余操作的方法,文中介绍的非常详细,具有 ...

  9. go语言for循环中修改临时变量无效

    总结 1. for循环中,遍历变量是临时变量,修改不影响原始变量 2. for循环中如果想修改原始变量,可以直接修改原始变量本身才行 实验如下图 代码如下 package main import &q ...

最新文章

  1. R语言中的dnorm(),pnorm(),qnorm(),rnorm()的解释
  2. CSS3伪类和伪元素的特性和区别
  3. python简单代码input-python基础 input()函数
  4. DPDK加速I/O虚拟化
  5. 关于LB论坛的一个BUG的探讨
  6. Docker Redis部署_04
  7. 利用UrlRewrite,asp.net动态生成htm页面(补充说明)
  8. 12.go 源码文件
  9. JavaScript:设置网站title
  10. java 聊天室系统实训总结_关于JAVA聊天室编写的总结
  11. SPSS实现多因素方差分析
  12. 最新版gg服务器框架安装器,GG服务框架安装器
  13. 正弦波的生成及混频器
  14. POI对Word操作参考
  15. android 支持最低版本是多少g,手机需要多少G的运行内存,才真正够用?
  16. esp32-cam摄像头+远程遥控小车
  17. pywifi破解密码
  18. 自己对PID控制算法的一点见解
  19. 《区块链:从数字货币到信用社会》电子书下载 -(百度网盘 高清版PDF格式)
  20. 想要写好文案,就要学习这八种动物

热门文章

  1. (附源码)springboot养老院系统 毕业设计 645488
  2. Mimikatz 命令
  3. 题目 J : 赌徒的必胜策略
  4. JAVA 3DES加密 ECB模式 ZeroPadding填充
  5. 优化自己的电脑 系统瘦身8大方法
  6. 跑步app保活_android APP保活机制
  7. 视频教程-photoshop cc2017全套视频课程 从基础到实战案例PS海报-Photoshop
  8. python 自动登录百度账号 by Dopamine
  9. STM32 电机教程 9 - BLDC电机基础
  10. 即时通登陆显示服务器失败,即时通中网页出现应用程序中的服务器错误是怎么回事...