#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int CheckNumber(long long int x);
int prime(long long int n);
int armstrong(long long int z);
int perfect(long long int y);
int main()
{
long long int i;
long long int x;
for (i = 1; i > 0; i++)
{
long long int n, s;
printf("\nEnter a number to be checked:");
scanf("%lld", &n);
s = CheckNumber(n);
switch (s)
{
case (0):
printf("\nThis number is Prime");
break;
case (1):
printf("\nThis number is Perfect");
break;
case (2):
printf("\nThis number is Armstrong");
break;
case (3):
printf("\nThis number is Armstrong & Prime");
break;
case (4):
printf("\nThis number is Armstrong & Perfect.");
break;
case (5):
printf("\nThis number is otherwise.");
break;
}
printf("\n\nwant to check another number?\n(1) to continue (0) to close.");
scanf("%lld", &x);
if (x == 0)
{
break;
};
}
return 0;
}
int prime(long long int n)
{
long long i, check = 0;
if (n == 0 || n == 1)
check = 1;
for (i = 2; i <= n / 2; ++i)
{
if (n % i == 0)
{
check = 1;
break;
}
}
if (check == 0)
{
return 0;
}
return 1;
}
int perfect(long long int y)
{
long long int n, i = 1, np = 0;
n = y;
do
{
if (n % i == 0)
{
np = np + i;
}
i++;
} while (i != n);
if (np == n)
{
return 1;
}
return 2;
}
int armstrong(long long int z)
{
long long int nfi, i, host, sum = 0, y;
y = z;
if (z == 0)
{
return 2;
}
nfi = floor(log10(y) + 1);
for (i = 1; i <= nfi; i++)
{
host = y % 10;
sum += pow(host, nfi);
y = y / 10;
}
if (z == sum)
{
return 2;
}
return 3;
}
int CheckNumber(long long int x)
{
if (x == 0 || x == 1)
{
return 2;
}
if (prime(x) == 0)
{
if (armstrong(x) == 2)
{
return 3;
}
else
{
return 0;
}
}
else if (perfect(x) == 1)
{
if (armstrong(x) == 2)
{
return 4;
}
else
{
return 1;
}
}
else if (armstrong(x) == 2)
{
return 2;
}
else
{
return 5;
}
}
这段代码有四个功能.
-
函数
prime
用于判断一个数字是否为质数;如果是质数,则返回0,如果不是,则返回1. -
函数
perfect
用于判断数字是否完全;如果完全,则返回1,如果不完全,则返回2. -
函数
armstrong
用于判断数字是否为阿姆斯特朗;如果是阿姆斯特朗,则返回2,如果不是,则返回3. -
checknumber
函数用于判断数字是质数、阿姆斯特朗数还是完全数.然后它会返回: -
如果该数是素数,则为0.
-
如果数字是完全数,则为1.
-
如果号码是阿姆斯特朗,则为2.
-
如果数是阿姆斯特朗和素数,则为3.
-
4如果数字是阿姆斯特朗和阿姆斯特朗的完美.
-
5.否则.
在main
函数中,
我做了一个无限循环,向用户询问他想要判断的号码,在判断之后,我询问用户是否想判断另一个号码.我还为checknumber
函数设置了switch
以打印输入的数字,例如:
用户输入7,输出为:
This number is Armstrong & Prime.
Want to check another number? (1) to continue; (0) to close.
问题是,当我使用这个数字(28116440335967)进行判断时,程序永远不会产生任何输出,我也不知道为什么.