#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int huiwen(char m[],int len)//传入字符串m和它的长度
{
int i, j = 0;
char *M;
M = (char *)malloc(sizeof(char)*(len + 1));//生成动态数组
for (i = len - 1; i>-1;i--)
{
M[j++] = m[i];
}
M[j] = '\0';//将数组以\0结尾变为字符串形式
if (strcmp(m, M) == 0)
return 1;
else
return 0;
free(M);//释放空间
}
int sushu(int x)//判断X是不是素数
{
int i;
for (i = 2; i <= sqrt(x);i++)//sqrt是开方
{
if (x%i== 0)
return 0;
}
return 1;
}
int qinmishu(int x, int y)//判断 x y是不是亲密数
{
int sum = 0, sum2 = 0;
int i, j;
for (i = 1; i <= x / 2; i++)
{
if (x%i== 0)
sum += i;//求x的因子之和
}
for (j = 1; j <= y / 2; j++)
{
if (sum%j == 0)
sum2 += j;//求y的因子之和
}
if (sum2 == x&&sum ==y)//满足条件返回真(1)否者返回假(0)
return 1;
else
return 0;
}
int shuixianhua(int x)//判断是不是水仙花数
{
int a, b, c, sum;
a = x / 100;//取百位
b = (x - a * 100) /10;//取十位
c = x % 10;//取个位
sum = a*a*a + b*b*b + c*c*c;//求和
if (sum == x)
return 1;
else
return 0;
}
int main()
{
int a, b, c, d, len, num;
int i, j,n;
char *s, *m;
s = (char *)malloc(sizeof(char) * 10);
m = (char *)malloc(sizeof(char) * 10);
printf("请输入一个数;\n");
scanf("%s",s);
printf("请选择需要输出的结果:\n");
printf("0.退出\n1.回文数\n2.素数\n3.亲密数\n4.水仙花数\n");
scanf("%d",&n);
num = atoi(s);//将字符串变为整型数
printf("%s以内的",s);
switch (n)
{
case 0: {printf("退出程序....\n"); return 0; }
case 1:{printf("回文数:\n");
for (i = 1; i <= num; i++)
{
m = itoa(i, m, 10);//将整型数变为字符串
len = strlen(m);
a = huiwen(m, len);
if (a == 0)
printf("");
else
printf("%d ",i);
}
}break;
case 2:
{
printf("素数:\n");
for (i = 2; i <= num; i++)
{
b = sushu(i);
if (b == 0)
printf("");
else
printf("%d ",i);
}
}break;
case 3: {printf("亲密数:\n");
for (i = 1; i <= num; i++)
{
for (j = i+1; j <=num; j++)
{
c = qinmishu(i, j);
if (c == 0)
printf("");
else
printf("(%d %d)", i, j);
}
}
}break;
case 4: {printf("水仙花数:\n");
for (i = 100; i <= 999; i++)
{
d = shuixianhua(i);
if (d == 0)
printf("");
else
printf("%d ",i);
}
}
break;
}
return 0;
}
计算1~n之间的特殊数: ①回文数;②素数;③亲密数;④水仙花数。
最新推荐文章于 2022-05-26 14:19:41 发布