运用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);
		
		
}

 

 

运用C语言求一个整数各个位数上的数字

 

 

总结

把一个数字拆分的方法还有很多,此方法应还有些许不足,但万变不离其宗,去个位和去最高位的思想有了,会有更优秀的代码,所以以上代码仅供参考。