问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
思路:
通过for循环,100~999,满足三位数的条件,满足从小到大的顺序输出。通过整除运算 / 和取余运算 % 将各位数字存放在不同变量里,再通过if语句判断,符合条件的输出。注意求立方不可以a^3,可以直接a * a * a,或者在开头加一句#include <math.h>,便可用幂函数pow(a,3)。
但这个方法不具有广泛性,只针对这道题,想了解更多的可以看后面的补充内容
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c;
int i;
for(i=100;i<1000;i++) //满足三位数的条件,满足从小到大的顺序输出
{ //遍历每个三位数
a=i%10; //求得个位数
b=i/10%10; //求得十位数
c=i/100%10; //求得百位数
if((pow(a,3)+pow(b,3)+pow(c,3))==i)
printf("%d\n",i);
}
return 0;
}
评测结果.png
补充
当题目给定的不是三位数,而是七位数、八位数时,再用a、b、c……的变量去存放各位数字是不理想的,故我们可以通过while循环来实现,用数组来存放各位数字,同时用变量sum来存放立方和。
代码:
#include <stdio.h>
#include <math.h>
int main()
{
int i,num;
int s[10];
for(i=100;i<1000;i++) //满足三位数的条件,满足从小到大的顺序输出
{ //遍历每个三位数
num = i;
int m = 0;
int sum = 0;
while(num!=0)
{
s[m]=num%10;
num/=10;
sum+=pow(s[m++],3);
}
if(sum==i)
printf("%d\n",i);
}
return 0;
}
评测结果.png
运行结果:
运行结果.png