水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153
这样的问题就很简单,我们可以先把这个三位数i如以下代码拆分:
//int a,b,c,i;
//scanf("%d",&i);
a=i/100;//百位数字
b=(i%100)/10;//十位数字
c=(i%10)%10;//个位数字
拆分后,根据水仙花数的定义,判a,b,c的立方之和是否等于i,再做遍历判断并打印每一个水仙花数,完整代码如下:
#include<stdio.h>
int main()
{
int a,b,c;
printf("水仙花数如下:");
for(int i = 100;i<999;i++)
{
a=i/100;
b=(i%100)/10;
c=(i%10)%10;
if(a*a*a + b*b*b + c*c*c == i)
{
printf("%d%d%d\t",a,b,c);
}
}
printf("\n");
return 0;
}
当然也可以不拆分,用数组存入每一位(遍历可能有些麻烦)这里就先不演示了。
接下来是回文数:
若一个五位数个位与万位相同,十位与千位相同,那么他就是回文数,如12321;
接下来是判断回文数,思路与水仙花数是一样的,先对五位数n进行拆分,如下:
a = n/10000;
b = n%10000/1000;
c = n%1000/100;
d = n%100/10;
e = n%10;
然后判断a是否等与e,b是否等于d,完整代码如下:
#include<stdio.h>
int main()
{
int a,b,c,d,e,i,n;
printf("输入一个五位数:");
scanf("%d",&n);
a = n/10000;
b = n%10000/1000;
c = n%1000/100;
d = n%100/10;
e = n%10;
if(a == e && b == d)
{
printf("是回文数\n");
}
else
{
printf("不是回文数\n");
}
return 0;
}
同样,我们也可以把每位存入数组,如下:
char num[10];
scanf("%s",&num);
for (int i = 0; i < 5; i++)
{
printf("%c", num[i]);
}
if((num[0] == num[4]) && (num[1] == num[3]))
{
printf("是回文数\n");
}
else
{
printf("不是回文数\n");
}
好了今天就到这里,希望大家支持。