请编写程序,由系统随机产生一个正整数 D(1<(n《50000),根据菜单提示,选择输出小于n的以下?种特殊数据中的一种:(1)完全数,(2)亲密数,(3)水仙花数。(4)阶乘和数,(5)自守数,(6)李生素数;直到用户退出系统.
时间: 2024-01-02 13:02:49 浏览: 94
编程求n的阶乘。要求:程序运行时,输入正整数n,求123...(n-1)n的值并输出
下面是一个简单的实现,使用了switch语句来根据用户的选择输出对应的特殊数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 判断一个数是否是完全数
int isPerfect(int num)
{
int sum = 0;
for (int i = 1; i < num; i++)
{
if (num % i == 0)
{
sum += i;
}
}
return sum == num;
}
// 判断两个数是否互为亲密数
int isAmicable(int num1, int num2)
{
int sum1 = 0, sum2 = 0;
for (int i = 1; i < num1; i++)
{
if (num1 % i == 0)
{
sum1 += i;
}
}
for (int i = 1; i < num2; i++)
{
if (num2 % i == 0)
{
sum2 += i;
}
}
return sum1 == num2 && sum2 == num1;
}
// 判断一个数是否是水仙花数
int isNarcissistic(int num)
{
int sum = 0, n = num;
while (n != 0)
{
int digit = n % 10;
sum += digit * digit * digit;
n /= 10;
}
return sum == num;
}
// 计算一个数的阶乘
int factorial(int num)
{
int result = 1;
for (int i = 1; i <= num; i++)
{
result *= i;
}
return result;
}
// 判断一个数是否是自守数
int isAutomorphic(int num)
{
int square = num * num;
while (num != 0)
{
if (num % 10 != square % 10)
{
return 0;
}
num /= 10;
square /= 10;
}
return 1;
}
// 判断一个数是否是李生素数
int isLisheng(int num)
{
if (num < 2)
{
return 0;
}
for (int i = 2; i < num; i++)
{
if (num % i == 0)
{
return 0;
}
}
int sum = 0, n = num;
while (n != 0)
{
int digit = n % 10;
sum += digit * digit;
n /= 10;
}
return isLisheng(sum);
}
int main()
{
int n, choice, num1, num2;
srand(time(NULL));
printf("请输入一个正整数n:");
scanf("%d", &n);
while (1)
{
printf("请选择输出以下哪种特殊数据(输入0退出系统):\n");
printf("1.完全数\n");
printf("2.亲密数\n");
printf("3.水仙花数\n");
printf("4.阶乘和数\n");
printf("5.自守数\n");
printf("6.李生素数\n");
printf("请选择:");
scanf("%d", &choice);
if (choice == 0)
{
break;
}
switch (choice)
{
case 1:
for (int i = 1; i < n; i++)
{
if (isPerfect(i))
{
printf("%d ", i);
}
}
printf("\n");
break;
case 2:
for (int i = 1; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (isAmicable(i, j))
{
printf("(%d, %d) ", i, j);
}
}
}
printf("\n");
break;
case 3:
for (int i = 1; i < n; i++)
{
if (isNarcissistic(i))
{
printf("%d ", i);
}
}
printf("\n");
break;
case 4:
for (int i = 1; i < n; i++)
{
int sum = 0;
for (int j = 1; j <= i; j++)
{
sum += factorial(j);
}
if (sum == i)
{
printf("%d ", i);
}
}
printf("\n");
break;
case 5:
for (int i = 1; i < n; i++)
{
if (isAutomorphic(i))
{
printf("%d ", i);
}
}
printf("\n");
break;
case 6:
for (int i = 1; i < n; i++)
{
if (isLisheng(i))
{
printf("%d ", i);
}
}
printf("\n");
break;
default:
printf("无效选择!\n");
break;
}
}
return 0;
}
```
在上述代码中,我们定义了6个函数来判断不同的特殊数据类型。在主函数中,我们使用了一个无限循环,直到用户输入0退出系统。在每轮循环中,我们先根据用户的选择输出对应的特殊数据,然后回到循环开始,等待用户下一轮的选择。
阅读全文