c++输出 1 到 1000之间的所有满足各位数字的立方和等于它本身的数。

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int a,m,n=0,i=0;
for(m=1;m<=1000;m=m+1)
{
for(int j=1;j<=4;j=j+1)
{
a=m;
n=n+(a%10)^3;
a=a/10;
}
if(n==m)
{
cout<<m;
i=i+1;
if(i%10==0)cout<<endl;
}
}
return 0;
}
这是我编的程序,看不出哪里有错,希望大家帮帮忙~~
最新回答
盛夏之末

2024-11-06 04:05:55

你的思想是对的。不过程序有如下错误:
1. a=m;这个要放在循环外。因为你是对一个相对固定的数字m进行位数处理,不能在处理位数时,每次都重新赋值,这是和a=a/10;自相矛盾的。
2. n=0 这个要放在外层循环内,因为n是一个暂时的计算各位数字的立方和的存放点,必须在计算下一个数字m时,重新归0。
3. cout<<m;这个写法很不好,因为所有数字都挤在一起,应该加上<<' ';
4. 最严重的错误是:n=n+(a%10)^3;注意,这种数学公式直接搬上来是错误的,^这个符号表示异或,而不是你想象的立方符号,应该使用库函数int pow(int x, int y);其中,x是要求立方的数字,y是求几次方,函数原型可能跟我写的不一样,但是大概意思是这样的。
所以写程序还是注意细节比较好,不然出了错误很难找,你这个还是很简单的,修改以后的程序应该像这样:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main()
{
int i=0;
for(int m=1;m<=1000;m=m+1)
{
int a=m;
int n=0;
for(int j=1;j<=4;j=j+1)
{
n=n+pow(a%10,3);
a=a/10;
}
if(n==m)
{
cout<<m<<' ';
i=i+1;
if(i%10==0)cout<<endl;
}
}
return 0;
}
离人乱他心

2024-11-06 03:46:16

晕~~很简单的
不要直接想
首先一位数只有1能实现,其他的不能,不多解释了
两位数如果能满足要求的话,a^3+b^3=10*a+b
三位数 同理得 a^3+b^3+c^3=100*a+10*b+c
这样的话就只要遍历0~9就OK

#include <iostream.h>
int main()
{
cout<<1<<endl;
for(int a=1;a<=9;a++)
for(int b=0;b<=9;b++)
{
int c=0;
while(c<=9)
{
if(a*a*a+b*b*b+c*c*c==100*a+10*b+c)
cout<<100*a+10*b+c<<endl;
c++;
}
if(a*a*a+b*b*b==10*a+b)
{
cout<<10*a+b<<endl;
}
}
return 0;
}
宛若晴空

2024-11-06 00:56:23

很显然,错了挺多地方,比如a=m;得放在for循环外,要不就每次循环都被赋值了,还有if(n==m)完后得重新给令n=0;否则n会一直加下去,还有很多错误,
而且算法有点复杂,我重新给你写个吧

#include <iostream>
#include<cmath>
using namespace std;
void main()
{
int i,gw,sw,bw;
for(i=1;i<1000;i++)
{
bw=i/100; //百位
sw=(i%100)/10;//十位
gw=i%10;//个位
if(pow(bw,3)+pow(sw,3)+pow(gw,3)==i)
printf("%d\n",i);
}

}

如果非得改你那个程序的话,可以改成这样的:

#include <iostream>
#include<cmath>
using namespace std;
main()
{
int i,j,k,s;
for(i=1;i<=1000;i++){
j=i;s=0;
while(j){
k=j%10;
s+=k*k*k;
j/=10;
}
if(s==i)
printf("%d\n",i);

}
}
清风未央

2024-11-06 04:04:36

你的n在循环之后没有初始化
浪漫尽失

2024-11-06 04:07:32

= =!百科有~~上次见过呢~

for(i=0;i<9;i++)
for(j=0;j<9;j++)
for(k=1;k<9;k++)
if((i*i*i)+(j*j*j)+(k*k*k)==(k*100)+(j*10)+i)
printf("%d%d%d",k,j,i);