这题哪里出错了?本题:输出11-999之间的数m,要求m,m*m,m*m*m都为回文数。 如11,121,1331。
#include<stdio.h>longinthw(longintm){inta[6];inti,c,s;longintx,sum;for(i=0;i<=5;i++){...
#include<stdio.h>
long int hw(long int m)
{int a[6];
int i,c,s;
long int x,sum;
for(i=0;i<=5;i++)
{
a[i]=m%10;
m/=10;
if(m==0)break;
}
c=i;
s=1;
while(i>=0)
{int a;
for(a=0;a<=c-i;a++)
{
if(a>0)
s=s*10;
}
x=long int(a[i]*s);
sum=sum+x;
i--;
}
return sum;
}
void main()
{
long int m,n,a,b;
for(m=11;m<=999;m++)
{n=hw(m);
a=hw(m*m);
b=hw(m*m*m);
if(n==m&&a==m*m&&b==m*m*m)
printf("%d",m);
}
} 展开
long int hw(long int m)
{int a[6];
int i,c,s;
long int x,sum;
for(i=0;i<=5;i++)
{
a[i]=m%10;
m/=10;
if(m==0)break;
}
c=i;
s=1;
while(i>=0)
{int a;
for(a=0;a<=c-i;a++)
{
if(a>0)
s=s*10;
}
x=long int(a[i]*s);
sum=sum+x;
i--;
}
return sum;
}
void main()
{
long int m,n,a,b;
for(m=11;m<=999;m++)
{n=hw(m);
a=hw(m*m);
b=hw(m*m*m);
if(n==m&&a==m*m&&b==m*m*m)
printf("%d",m);
}
} 展开
2个回答
展开全部
楼主附带一点说明吧,这个程序思路上好像有点问题,越看越糊涂了,你说明下变量的意义,我就帮你看看,现在编译出来是地21行a[i]出错"i下标要求数组或指针类型"即使调试完成,最后执行的时候还是会报错,说明方法和定义上有问题。
程序最重要的可读性。你的结构是挺好的,先声明函数,后主函数调用,输出;但是m,和m*m*m 的中间的m到底是不是回文数要求的呢,如果连回文数都没弄懂之前就开始,估计问题不在少。我不想去看你定义的那么多变量,我只要知道:
①确定数的范围,赋入数组;
②对数组元素分别取个、十、百位上的数值;
③数值比较,是回文数的都输出。
#include <iostream>
using namespace std;
int main()
{
int hws1[1000],hws2[500],a,b,c;
for(int m=0;m!=1000;++m)
{
hws1[m]=m;
}
for(int i=0,j=0;i!=1000;++i,++j )
{
a=hws1[i]/100;
b=(hws1[i]%100)/10;
c=hws1[i]-a*100-b*10;
if((a==c&&a*c!=0)||(b==c&&a==0&&b*c!=0))
{
hws2[i]=hws1[i];
cout<<hws2[i]<<" ";
if(j%9==0)
cout<<endl;
}
}
return 0;
}
程序最重要的可读性。你的结构是挺好的,先声明函数,后主函数调用,输出;但是m,和m*m*m 的中间的m到底是不是回文数要求的呢,如果连回文数都没弄懂之前就开始,估计问题不在少。我不想去看你定义的那么多变量,我只要知道:
①确定数的范围,赋入数组;
②对数组元素分别取个、十、百位上的数值;
③数值比较,是回文数的都输出。
#include <iostream>
using namespace std;
int main()
{
int hws1[1000],hws2[500],a,b,c;
for(int m=0;m!=1000;++m)
{
hws1[m]=m;
}
for(int i=0,j=0;i!=1000;++i,++j )
{
a=hws1[i]/100;
b=(hws1[i]%100)/10;
c=hws1[i]-a*100-b*10;
if((a==c&&a*c!=0)||(b==c&&a==0&&b*c!=0))
{
hws2[i]=hws1[i];
cout<<hws2[i]<<" ";
if(j%9==0)
cout<<endl;
}
}
return 0;
}
展开全部
既然求助了给点建议吧,可能不对呢。你是要用数组,将整数反序吧因为我对c语言不了解,不过基于别的语言,我觉得你的程序可能有2个问题:
1,你定义一个int[]数组,设置为6个元素是为什么,11-999范围内的好多数的三次方都会超过6位数的啊,你不怕数组越界,还是c语言中没有越界的概念?(这个c语言中数组的定义我确实不太清楚)
2,hw方法中的循环应该有问题,for循环多余吧,。语法上变量a重复了么?怎么改你自己看看吧。我猜改成下面这段你看行不行。可能有错,我不清楚c语言的语法。咕~~(╯﹏╰)b
while(i>=0)
{int b;
if(b>0)
s=s*10;
x=long int(a[i]*s);
sum=sum+x;
i--;
b++;
}
1,你定义一个int[]数组,设置为6个元素是为什么,11-999范围内的好多数的三次方都会超过6位数的啊,你不怕数组越界,还是c语言中没有越界的概念?(这个c语言中数组的定义我确实不太清楚)
2,hw方法中的循环应该有问题,for循环多余吧,。语法上变量a重复了么?怎么改你自己看看吧。我猜改成下面这段你看行不行。可能有错,我不清楚c语言的语法。咕~~(╯﹏╰)b
while(i>=0)
{int b;
if(b>0)
s=s*10;
x=long int(a[i]*s);
sum=sum+x;
i--;
b++;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询