中国石油大学C语言程序网络作业题(含大数相加) 下载本文

printf(\ }

printf(\ } return 0; }

5.11 最大公约数

输入两个正整数m和n,求它们的最大公约数和最小公倍数

比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。 #include void main() {

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 void main() { }

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 #include int main() {

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 #include void main() {int m,n,i,j,k;

scanf(\ for(i=m;i

if(i%j==0)

break; printf(\ if(j>k)

else

printf(\

- 22 -

printf(\}

5.15 找出最大素数

素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。 输入:取值范围

输出:该范围内的最大素数 #include int main() {

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 #include #include char *chan(int count) ; int main(int argc, char* argv[]) {

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 #include int main() {

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 -