
数的判断类问题 【程序1】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数, 请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再 开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码: #include "math.h" main() { long int i,x,y,z; for(i=1:ik100000:i++】 x=sgrt(i+100); /*×为加上100后开方后的结果*/ y=sqrt(i+268): /*y为再加上168后开方后的结果*/ fx*x=i+100&&y*y=i+268)/*如果一个数的平方根的平方等于该数,这说明此数 是完全平方数*/ printf("\n%ld\n",i); } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n");
数的判断类问题 【程序 1】 题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数, 请问该数是多少? 1.程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再 开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码: #include "math.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x 为加上 100 后开方后的结果*/ y=sqrt(i+268); /*y 为再加上 168 后开方后的结果*/ if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数 是完全平方数*/ printf("\n%ld\n",i); } } 【程序 2】 题目:判断 101-200 之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n");

for(m=101;m<=200;m+) {k=sqrt(m+1方 fori=2;ik=k:i+) if(m%i=0) {leap=0;break;} if(leap)(printf("%-4d",m);h++; ifh%10==0)】 printf("\n"); } leap=1; } printf("\nThe totalis %d",h); == 【程序3】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立 方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方十3 的三次方。 1.程序分析:利用for循环控制100999个数,每个数分解出个位,十位,百位。 2.程序源代码: main() { int i,j,k,n; printf("'water flower'number is:") forn=100;n<1000;n++) in/100:/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m);h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d",h); } ============================================================== 【程序 3】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立 方和等于该数本身。例如:153 是一个“水仙花数”,因为 153=1 的三次方+5 的三次方+3 的三次方。 1.程序分析:利用 for 循环控制 100-999 个数,每个数分解出个位,十位,百位。 2.程序源代码: main() { int i,j,k,n; printf("'water flower'number is:"); for(n=100;n<1000;n++) { i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

{ printf("%-5d",n); printf("\n"); } 【程序4】 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1十2十3.编 程找出1000以内的所有完数。 1.程序分析:请参照程序<-上页程序14. 2.程序源代码: main() { static int k[10]; int i,j,n,s; for0=2;j<1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) n++; s=s-i; k[n]=i; if(s=-0) { printf("%d is a wanshu",j); for(i=0;i printf("%d,",ki]);
{ printf("%-5d",n); } } printf("\n"); } 【程序 4】 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如 6=1+2+3.编 程找出 1000 以内的所有完数。 1. 程序分析:请参照程序<--上页程序 14. 2.程序源代码: main() { static int k[10]; int i,j,n,s; for(j=2;j<1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) { printf("%d is a wanshu",j); for(i=0;i printf("%d,",k[i]);

printf("%d\n",k[n]); } } 【程序5】 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位 与千位相同。 1.程序分析:同29例 2.程序源代码: main() { long ge,shi,qian,wan,x; scanf("%ld",&x); wan=x/10000: qian=x%10000/1000; shi=x%100/10; ge=x%10; if(ge=wan&&shi=qian)/体个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n"); else printf("this number is not a huiwen n")
printf("%d\n",k[n]); } } } 【程序 5】 题目:一个 5 位数,判断它是不是回文数。即 12321 是回文数,个位与万位相同,十位 与千位相同。 1.程序分析:同 29 例 2.程序源代码: main( ) { long ge,shi,qian,wan,x; scanf("%ld",&x); wan=x/10000; qian=x%10000/1000; shi=x%100/10; ge=x%10; if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n"); else printf("this number is not a huiwen\n"); }