你x只是三个数立方根的和,并没有计算x这个三位数是不是等于他每一位数的立方根的和。
#include<stdio.h>
int main(){
int m,n,a,b,c,x,count;
count=0;
while(scanf("%d %d\n",&m,&n)!=EOF)
{
if(100<=m&&m<n&&n<=999){
for(x=m;x<=n;x++){
a=x%10;
b=(x/10)%10;
c=(x/100)%10;
if(x==a*a*a+b*b*b+c*c*c){
count=1;
printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n",x,a,a,a,b,b,b,c,c,c);continue;}
else{
continue;
}
}
if(count==0) printf("none");
}
}
return 0;
}
你的abc分别从1开始遍历显然是不合题意的,应该分别提取出个位,十位,百位上的数计算立方和。
这是我的代码,如果对你有帮助的话欢迎关注我的博客,定期更新算法与学习笔记~
回答不易,祝你学业进步。
#include<stdio.h>
int main(){
// l左区间 r右区间 a个位数 b十位数 c百位数
int l,r,a,b,c;
while (scanf("%d %d\n",&l,&r) != EOF){
// 如果找到水仙花数,isnone改为false,后面就不会输出none了
bool isnone = true;
for(int num = l;num<=r;num++){
int temp=num;
// 提取个位数
a=temp%10;
temp=temp/10;
// 提取十位数
b=temp%10;
temp=temp/10;
// 百位数
c=temp;
if(num == a*a*a+b*b*b+c*c*c){
printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n",num,c,c,c,b,b,b,a,a,a);
isnone = false;
}
}
if(isnone == true)
printf("none\n");
}
return 0;
}