输出一串数字的每一位
初学C语言,OJ题目的解题过程中经常需要提取一个数字的每一位并输出;分为如下两种情况:正序输出,逆序输出。
正序输出
按照传统思路,对于一个数,可以通过除法取整或者取余来实现对各位的提取。这里是我们学校OJ里的顺序输出题目:HautOJ 1601。
注意整数运算避免使用double类型的函数如pow()。
本题可先用一个循环计算出最高位的位权h,然后再用一个循环,循环内容为: 输出最高位(n/h)、扔掉最高位(n = n%h)、降低最高位位权(h = h/10),直到位权h为0。
先贴代码:
1 | #include<stdio.h> |
计算权位
注意我们这里P即为数字n的权位,当数字m不为个位数的话,就每次砍掉一位,并提升权位一位。
例如:我们有一个数字2333。
1:我们进行计算,2333/10=233,权位提升到10。
2:233/10=23,提升权位到100。
3:23/10=2,提升权位到1000,运行条件判断,结束循环。
在这里我们使用了循环来避免浮点型数字的出现。
输出各位数字
每次对该数字进行除法取整,每次计算结束后数值变更为砍掉最高位的数字,并对位权降位,如此循环可得结果。
逆序输出
相关题目可见HautOJ1060。
代码如下:1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
int n;
scanf("%d",&n);
while (n!=0)
{
printf("%d ",n%10);
n=n/10;
}
return 0;
}
每次循环进行的时候,对该数字除10取余,可得最低位。取整,砍掉最低位。单次取整结果作为下次取余的数字。如此循环,直至数字变为个位数(n!=0)。
回文数
(正序,逆序都会了,回文呢?
当然,回文数的判断只是把该数与其逆序数对比,相等即回文。单独放出判断函数如下:
1 | int huiwen (int i) |
该函数里我们添加了一个变量t用于储存原始数据i,原因是因为我们在每次取整的时候会对数字i进行改动。
本文标题:输出一串数字的每一位
文章作者:Raincorn
发布时间:2019-11-01
最后更新:2020-07-28
原始链接:https://blog.raincorn.top/2019/11/01/Ouput_Digit/
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可