printf(\ }
printf(\ } return 0; }
5.11 最大公约数
输入两个正整数m和n,求它们的最大公约数和最小公倍数
比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。 #include
int m,n,i,j;
scanf(\ for(i=m;i>=1;i--) {
if (n%i==0&&m%i==0)
{printf(\ } }
for (j=m;;j++) {
if (j%m==0&&j%n==0)
{printf(\ } } } 5.12 水仙花数
输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153是一水仙花数,因为153=13+53+33
输出语句:printf(\#include
int n, i, j, k;
for(n=100; n<=999; n=n+1) {
i = n/100; // 取出n的百位数 j = (n/10); // 取数n的十位数 k = n; // 取出n的个位数 if(n==i*i*i+j*j*j+k*k*k) printf(\}
- 21 -
5.13 完数
一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No #include
int n,i,c,sum=0;
scanf(\
{
sum=sum+i;
for(i=1;i if(n==sum) { printf(\ for(c=1; c { } if(n%c==0) printf(\ printf(\ } } 5.14 素数 输入两个正整数m和n,求出[m,n]区间的所有素数 #include scanf(\ for(i=m;i if(i%j==0) break; printf(\ if(j>k) else printf(\ - 22 - printf(\} 5.15 找出最大素数 素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。 输入:取值范围 输出:该范围内的最大素数 #include int a,i,j; scanf(\ for(i=a;i>1;i--) { for(j=2;j if(i%j==0) break; } if(j==i) } 5.16 回文数 输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No #include char *str; int i,n; str=chan(0); n=strlen(str); for (i = 0; i<(n-1)/2; i++) { if (str[i]!=str[n-1-i]) { n=0; break; } } if (n) { } { } printf(\break; - 23 - printf(\ } else printf(\ free(str); system(\ return 0; } char *chan(int count) { char a; static char * p; if ((a=getchar())!='\\n') { count++; chan(count); } else { p=malloc(sizeof(char)*(count+1)); *(p+count)=0; return p; } *(p+count-1)=a; return p; } 选做 5.17 自守数 自守数是指一个数的平方的尾数等于该数自身的自然数。例如252=625,762=5776。输入一个自然数,判断其是否为自守数。 如果是,则输出Yes,否则输出No #include int n,i,j,a=0,b=1,c; scanf(\ i=n*n; j=i-n; while(n>0) { n=n/10; a++; } for(c=1; c<=a; c++) { - 24 -