如何求一个数字有几位数以及每一位的数字(应用:水仙花数)

求一个数有几位

int main()
{
int i = 1234;
int count = 0;//位数
for(int i = 1;i <= 999999;i++)
{
//求i为几位数
	while(tmp != 0)
	{
			count++;
			tmp = tmp/10;//123  12   1
	}
return 0;
}

求数字每一位是多少

num%10num/10结合使用

int main()
{
	int num = 1234;
	int i = 0; //每一位数字
	while (num != 0)
	{
		 i = num % 10;
		printf("%d ", i);
		num = num / 10;
	}
	return 0;
}

水仙花数

在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、
阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,
其各个数之N次方和等于该数。
例如:153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
1234 = 14+24+34+44

求出0~999999之间的所有“水仙花数”并输出。

// 1.求出0~999999之间的所有“水仙花数”并输出。

#define _CRT_SECURE_NO_WARNINGS 1
#include<math.h>
#include<stdio.h>
void main()
{
	int num=1;//数字
	int result = 1;//数字次方之和
	int a[6] = {0};//存放数字的每一位数
	int m = 0;//
	int n = 0;//还是存放数字,算数字位数要用,确保不改变数字初始值
	int count = 0;//数字位数
	printf("0~999999之间的所有“水仙花数”如下:\n");
	for (num = 1; num <= 999999; num++)
	{
		count = 0;
		a[0] = num / 100000;
		a[1] = (num % 100000) / 10000;
		a[2] = ((num % 100000) % 10000) / 1000;
		a[3] = ((num % 100000) % 10000) % 1000 / 100;
		a[4] = ((num % 100000) % 10000) % 1000 %100 / 10;
		a[5] = ((num % 100000) % 10000) % 1000 % 100 % 10;
		n = num;
		while (n > 0)//判断是几位数
		{
			n = n / 10;
			count++;
		}
		result = pow(a[0], count) + pow(a[1], count) + pow(a[2], count) + pow(a[3], count) + pow(a[4], count) + pow(a[5], count);
		if (num == result)
		{
			printf("%d\n", num);
		}
	}
}

优化

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 999999; i++)
	{
		//1、求i为几位数
		int tmp = i; // 求几位数时将i值赋给tmp,防止运算过程中数字被改变
		int count = 0; // 记录有几位数
		int sum = 0; 
		while (tmp != 0)
		{
			count++;
			tmp = tmp / 10; //count=1 123/10=12   -->12!=0 count=2 12/10=1 -->...
		}
		tmp = i;
		//2、tmp的每一位求出  然后进行次方运算 
		//123   123%10=3   123/10%10=2     1  +  sum
		//pow(double x,double y);-->x^y      
		while (tmp != 0)
		{
			sum += pow((double)(tmp % 10), (double)count);
			tmp = tmp / 10;
		}
        //3. 满足则是水仙花数,输出
		if (sum==i)
			printf("%d\n", i);
		}    
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43360037/article/details/97511135