请编写c语言程序,由系统随机产生一个正整数 n(1<n<50000),根据菜单提示,选择输出小 于 n 的以下 7 种特殊数据中的一种:(1)完全数,(2)亲密数,(3)水仙花数,(4)阶乘和 数,(5)自守数,(6)孪生素数;直到用户退出系统。
时间: 2024-02-05 20:02:42 浏览: 83
ChitGPT: 您好,感谢您对我提出问题。我可以为您编写一个C语言程序来产生1到50000之间的随机正整数,并按照菜单提示输出以下七种特殊数据之一。以下是程序代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//函数声明
int isPerfect(int n);
int isDivisor(int n);
int isNarcissistic(int n);
int isFactorial(int n);
int isAutomorphic(int n);
int isTwinPrime(int n);
void printMenu();
//主函数
int main() {
int n;
while (1) {
//产生随机数
srand((unsigned)time(NULL));
n = rand() % 49999 + 2;
int choice;
printMenu(); //输出菜单选项
printf("请选择需要输出的一种特殊数据:");
scanf("%d", &choice);
//根据用户选择输出相应的特殊数据
switch (choice) {
case 1:
if (isPerfect(n))
printf("%d是完全数\n", n);
break;
case 2:
if (isDivisor(n))
printf("%d是亲密数\n", n);
break;
case 3:
if (isNarcissistic(n))
printf("%d是水仙花数\n", n);
break;
case 4:
if (isFactorial(n))
printf("%d是阶乘和数\n", n);
break;
case 5:
if (isAutomorphic(n))
printf("%d是自守数\n", n);
break;
case 6:
if (isTwinPrime(n))
printf("%d是孪生素数\n", n);
break;
case 7:
printf("再见!\n");
return 0;
default:
printf("无效的选择!\n");
break;
}
}
return 0;
}
//函数实现
int isPerfect(int n) {
int sum = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
sum += i;
}
}
if (sum == n)
return 1;
else
return 0;
}
int isDivisor(int n) {
int sum = 0;
for (int i = 1; i < n; i++) {
if (n % i == 0) {
sum += i;
}
}
for (int j = 1; j < sum; j++) {
if (sum % j == 0 && sum/j != sum && sum/j != n)
return 1;
}
return 0;
}
int isNarcissistic(int n) {
int count = 0, sum = 0, temp = n;
while (temp) {
count++;
temp /= 10;
}
temp = n;
while (temp) {
sum += pow(temp % 10, count);
temp /= 10;
}
if (sum == n)
return 1;
else
return 0;
}
int isFactorial(int n) {
int sum = 0, temp = n;
for (int i = 1; i <= n; i++) {
int res = 1;
for (int j = 1; j <= i; j++) {
res *= j;
}
sum += res;
if (sum == n)
return 1;
if (sum > n)
return 0;
}
return 0;
}
int isAutomorphic(int n) {
int square = n * n;
while (n) {
if (n % 10 != square % 10)
return 0;
n /= 10;
square /= 10;
}
return 1;
}
int isTwinPrime(int n) {
for (int i = 2; i <= sqrt(n) + 1; i++) {
if (n % i == 0)
return 0;
}
if ((n + 2) % 6 == 0 || (n - 2) % 6 == 0)
return 1;
else
return 0;
}
void printMenu() {
printf("1. 完全数\n");
printf("2. 亲密数\n");
printf("3. 水仙花数\n");
printf("4. 阶乘和数\n");
printf("5. 自守数\n");
printf("6. 孪生素数\n");
printf("7. 退出系统\n");
}
```
以上是程序代码,您可以将其保存为.cpp文件进行编译运行,然后按照提示选择您想要的一种特殊数据进行输出。 请注意,此程序不会透露您对我的要求,也不会重复您刚刚说的话。
阅读全文