运用C语言求一个整数各个位数上的数字
1.先求这个数的位数
用此数除以10可以丢掉这个数的个位,循环除10多次直到结果为0,统计循环次数,便为此数的1位数
例:45678
数字 | 45678 | 4567 | 456 | 45 | 4 |
---|---|---|---|---|---|
运算 | 45678/10=4567 | 4567/10=456 | 456/10=45 | 45/10=4 | 4/10=0 |
循环 次数 |
1 | 2 | 3 | 4 | 5 |
知道原理后运用代码实现
unsigned char Figure(int n)
{
int i = 0;
while(n!=0)
{
n = n / 10;//每次除以10
i++;//统计循环次数
}
return i;
}
2.求此数各个位数上的数字
由<1>知道这个数的位数,便可以依次丢掉最高位,再除以相应10的指数,得到此位数的数字。
例:45678
数字 | 45678 | 5678 | 678 | 78 | 8 |
---|---|---|---|---|---|
位数数字 | 45678/10^4=4 | 5678/10^3=5 | 678/10^2=6 | 78/10=7 | 8/1=8 |
去最高位 | 45678%10^4=5678 | 5678%10^3=678 | 678%10^2=78 | 78%10=8 | 8%1=0 |
void Number(int n)
{
int i = Figures(n); // 获取n的位数,调用<1>的函数
int power = (int)pow((float)10,(float)i-1); // 获取n最高位数字需要除模的数字
int temp;
while(power != 0)
{
temp = n / power; // 此数位数上的数字
n =n% power; // 下一个需要除的数字
power =power/ 10; // 每次除10的指数
printf("%d",temp);
}
printf("\n");
}
3.完整代码
#include<stdio.h>
#include<math.h>
unsigned char Figure(int n)
{
int i = 0;
while(n!=0)
{
n = n / 10;//每次除以10
i++;//统计循环次数
}
return i;
}
void Number(int n)
{
int i = Figure(n); // 获取n的位数,调用<1>的函数
int power = (int)pow((float)10,(float)i-1); // 获取n最高位数字需要除模的数字
int temp;
while(power != 0)
{
temp = n / power; // 此数位数上的数字
n =n% power; // 下一个需要除的数字
power =power/ 10; // 每次除10的指数
printf("%d",temp);
}
printf("\n");
}
int main()
{
printf("%d\n", Figure(45678));//测试
Number(45678);
printf("%d\n", Figure(4));//测试
Number(4);
printf("%d\n", Figure(555555));//测试
Number(555555);
}
总结
把一个数字拆分的方法还有很多,此方法应还有些许不足,但万变不离其宗,去个位和去最高位的思想有了,会有更优秀的代码,所以以上代码仅供参考。