我自己改了一部分了,但是在输出结果的时候,还是不对,想了半天也没想到是哪里还有问题。一下网友
这是题目
在数论中,自幂数(Narcissistic number)用来描述一个N位非负整数,其各个位数字的N次方和等于该数本身。我们熟悉的水仙花数只是自幂数的一种,严格来说三位数的3次幂数才称为水仙花数。编写一个程序输入一个正整数,判断是不是自幂数。
注意:
(1)用标准 C 语言编程,所有变量必须在第一条可执行语句前定义。
(2)输入输出格式要和以下给定格式完全一致,建议拷贝粘贴输入输出格式。
输入格式:"Enter a number to verify if it is an Narcissistic number: %d"
如果n不满足题目要求的条件,则输出"Error!\n",并重新输入,直到合格为止(不考虑非法字符输入的情况)
输出格式: " Is %d an Narcissistic number? : %s\n "
运行示例 1:
-10
Error!
运行示例 2:
407
Is 407 an Narcissistic number? :true
运行示例 3:
1633
Is 1633 an Narcissistic number? :false
代码如下:
下面是我修改了一部分的代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int getNumberOfDigits(int n);
bool isNarcissisticNumber(int candidate);
int main()
{
int userNumber = 0;
do
{
printf("Enter a number to verify if it is an Narcissistic number: ");
scanf("%d",&userNumber);
if (userNumber < 0)
printf("Error!\n");
} while (userNumber <= 0);
if (isNarcissisticNumber(userNumber))
printf("Is %d an Narcissistic number?: true\n", userNumber);
else
printf("Is %d an Narcissistic number?: false\n", userNumber);
return 0;
}
bool isNarcissisticNumber(int candidate)
{
int numberOfDigits = getNumberOfDigits(candidate);
int sum=0;
for (int i = candidate; i != 0; i /= 10)
{
int num = i % 10;
int n=1;
for (int j = 0; j < numberOfDigits; j++)
{
n *= num;
}
sum += n;
}
return sum == candidate ? 1 : 0;
}
int getNumberOfDigits(int n)
{
if (0 <= n && n <= 9)
return 1;
else
return getNumberOfDigits(n/10) ;
}
我感觉可能是在位数判断的那块有问题,但是我不太清楚,求帮帮忙