小解的C语言笔记:循环中的取余操作 0%0
循环中的取余操作 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
具体步骤:
- 求出整数的位数 (12345 -> 10000)
这一步要注意不能直接对
num
进行操作,会影响后续对num
的操作,这一步的唯一目的就是求出mask=10000
.
int a = num; // 将整数赋值给一个新的变量
while(a > 9){a = a / 10;mask = mask * 10;
}
- 通过
/
取整数的第一位 (12345/10000->1 ) - 通过
%
取下一个整数(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=0
,mask=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---
!
总结
- 正序取出整数每一位的值可以通过
/
、%
交替进行; - 注意变量的作用域;
- 循环的终止条件,循环终止可能并非满足终止条件,而是出现异常?
小解的C语言笔记:循环中的取余操作 0%0相关推荐
- lua4.0中实现% 取余操作
相信大家对%取余很熟悉,lua5.0以上也完美的支持了,但是我最新的项目服务器使用%却莫名的报错,最后终于找到了罪魁祸首, #define LUA_VERSION "Lua 4.0" ...
- R语言把dataframe中的NA值替换为0
R语言把dataframe中的NA值替换为0 目录 R语言把dataframe中的NA值替换为0 缺失值替换 方法总结 缺失值替换
- html 连续发送数据库,不要在循环中对数据库进行操作.htm
不要在循环中对数据库进行操作 不要在循环中对数据库进行操作 性能非常低下,应改为用IN查询 示例: 1.在循环中查询数据库,增加gv_title属性(性能低下) foreach ($res['data ...
- python中的取余运算符是_python取余运算
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python中对负数求余的计算方法和求幂运算注意点python中对负数求余的计算 ...
- java里面取余什么意思_java中%是取余运算符。
[单选题] [单选题] [判断题]Hadoop存储系统HDFS的文件是分块存储,每个文件块默认大小为32MB [单选题]I think I am old enough and strong enoug ...
- ArrayDeque中的取余
Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字).而当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque:既然Queue只是一个接口, ...
- Python 中的取余与取整操作
%: 对于正数的取余操作,跟其他的语言没有什么区别,在这里重点说一下负数的取余: print (-5%3)#输出 1#仅有一负号时,在负无穷到-5之间找到一个数能被3整数,最接近于-5的数是-6,所以 ...
- python中如何取余_python如何实现取余操作的方法
python如何实现取余操作的方法 发布时间:2020-08-17 09:36:53 来源:亿速云 阅读:68 作者:小新 这篇文章主要介绍python如何实现取余操作的方法,文中介绍的非常详细,具有 ...
- go语言for循环中修改临时变量无效
总结 1. for循环中,遍历变量是临时变量,修改不影响原始变量 2. for循环中如果想修改原始变量,可以直接修改原始变量本身才行 实验如下图 代码如下 package main import &q ...
最新文章
- R语言中的dnorm(),pnorm(),qnorm(),rnorm()的解释
- CSS3伪类和伪元素的特性和区别
- python简单代码input-python基础 input()函数
- DPDK加速I/O虚拟化
- 关于LB论坛的一个BUG的探讨
- Docker Redis部署_04
- 利用UrlRewrite,asp.net动态生成htm页面(补充说明)
- 12.go 源码文件
- JavaScript:设置网站title
- java 聊天室系统实训总结_关于JAVA聊天室编写的总结
- SPSS实现多因素方差分析
- 最新版gg服务器框架安装器,GG服务框架安装器
- 正弦波的生成及混频器
- POI对Word操作参考
- android 支持最低版本是多少g,手机需要多少G的运行内存,才真正够用?
- esp32-cam摄像头+远程遥控小车
- pywifi破解密码
- 自己对PID控制算法的一点见解
- 《区块链:从数字货币到信用社会》电子书下载 -(百度网盘 高清版PDF格式)
- 想要写好文案,就要学习这八种动物
热门文章
- (附源码)springboot养老院系统 毕业设计 645488
- Mimikatz 命令
- 题目 J : 赌徒的必胜策略
- JAVA 3DES加密 ECB模式 ZeroPadding填充
- 优化自己的电脑 系统瘦身8大方法
- 跑步app保活_android APP保活机制
- 视频教程-photoshop cc2017全套视频课程 从基础到实战案例PS海报-Photoshop
- python 自动登录百度账号 by Dopamine
- STM32 电机教程 9 - BLDC电机基础
- 即时通登陆显示服务器失败,即时通中网页出现应用程序中的服务器错误是怎么回事...