C语言小白。。。。。。。。。。。

我是新大一刚学C语言的,所以有些地方不是很规范(比如定义了好多个变量。。。。。算法不好。。。。)因为我调试了感觉都对的,所以把整个代码发出来了,可能有点长。。。。==!这... 我是新大一刚学C语言的,所以有些地方不是很规范(比如定义了好多个变量。。。。。算法不好。。。。)
因为我调试了感觉都对的,所以把整个代码发出来了,可能有点长。。。。==!

这个是题目

下面是代码

#include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

return 0;
}

int narcissistic( int number )
{
int i=0,n=0,c;
int b[100];
long m=0,x=1;
int a;
a=number;

if(number<0)
number=number*(-1);

while(number>0)
{
b[i]=number % 10;
number=number/10;
i++;
n++;
}
c=n;
while(i>0)
{
n=c;
i--;
while(n>0)
{
x*=b[i];
n--;
}
m+=x;
x=1;
}
if(m==a) return true;
else return false;
}

void PrintN( int m, int n )
{
int i;
for(i=m+1;i<n;i++)
{
if(narcissistic( i ))
printf("%d\n",i);
}
}

/*
我提交的时候系统说我编译错误,可是我在DEVC++上测试时对的额。。。
下面是要点提示

测试点1 等待评测 0/12 sample等价,m另外输出
测试点2 等待评测 0/3 m最小,n另外输出
测试点3 等待评测 0/2 m==n要输出
测试点4 等待评测 0/3 最大区间
*/
额,另外因为提交作业的时候是只提交它要求的那两个自定义函数的,但它头文件又没有给我<math.h>,所以求幂的地方我弄了个循环,看起来是不大舒服
展开
 我来答
nifh80s
推荐于2018-03-01 · TA获得超过152个赞
知道小有建树答主
回答量:133
采纳率:100%
帮助的人:71万
展开全部
1、while(i>0)应该改成while(i>=0),之前还需要做一次i--,因为数组b是从0开始存的,while(number>0)结束时i多加了一次。
2、编译错误的原因可能是true和false,这是c++的常量,c语言里是没有的。
3、根据几个测试点,PrintN应该判断m、n的关系,需要排除无效数据,并打印信息,同时对于判断narcissistic函数返回值是否为1时最好写成if(narcissistic( i ) == 1),这样比较严谨。
4、最后,narcissistic里对于负数的处理也不好,拆分出来后都是正数,这样负数永远都不会对。当然,题目对m、n范围有要求,只是你没做。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式