用四個子函數來判斷一個數是不是 滿足迴文數 素數 親密數 水仙花數。
其中判斷迴文數,先把輸入的字符串數字入棧,將棧與原字符串用strcmp()函數進行比較是否一樣進行比較是不是迴文數。
其中用到將字符轉化爲整型的函數atoi(m),m爲字符串數組。還有將整型數字轉化爲字符串的函數itoa(x,m,10)其中x爲整型數字,m爲存字符串的數組,10位基數(就是需要轉換的進制數)。
迴文數:若將n的各位數字反向排列所得自然數n1與n相等,則稱n爲一回文數。例如,若n=1234321,則稱n爲一回文數;但若n=1234567,則n不是迴文數。
素數:大於一的除一和本身以外不能被其他數整除的數。
親密數:如果a的所有正因子和等於b,b的所有正因子和等於a,因子包括1但不包括本身,且a不等於b,則稱a,b爲親密數對。
水仙花數:三位自冪數:水仙花數
實訓代碼:
#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;
}