求一个数有几位
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%10
和num/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;
}