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>,所以求幂的地方我弄了个循环,看起来是不大舒服 展开
因为我调试了感觉都对的,所以把整个代码发出来了,可能有点长。。。。==!
这个是题目
下面是代码
#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>,所以求幂的地方我弄了个循环,看起来是不大舒服 展开
1个回答
展开全部
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范围有要求,只是你没做。
2、编译错误的原因可能是true和false,这是c++的常量,c语言里是没有的。
3、根据几个测试点,PrintN应该判断m、n的关系,需要排除无效数据,并打印信息,同时对于判断narcissistic函数返回值是否为1时最好写成if(narcissistic( i ) == 1),这样比较严谨。
4、最后,narcissistic里对于负数的处理也不好,拆分出来后都是正数,这样负数永远都不会对。当然,题目对m、n范围有要求,只是你没做。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询