C语言100例,C++100例 经典、实用、趣味程序设计编程百例精解(6)

2019-03-22 12:26

*运行结果

No. number it's square(palindrome) 1 1 1 2 2 4 3 3 9 4 11 121 5 22 484 6 26 676 7 101 10201 8 111 12321 9 121 14641 10 202 40804 11 212 44944

//下面程序是原来的,有错,而且费解 #include int main(void) {

int m[16],n,i,t,count=0; long unsigned a,k;

printf(\for(n=1;n<256;n++) /*穷举n的取值范围*/ {

k=0;t=1;a=n*n; /*计算n的平方*/

for(i=1;a!=0;i++) /*从低到高分解数a的每一位存于数组m[1]~m[16]*/ {

m[i]=a;//安安注:这个是取得a的个位,整个循环合起来就可以取得各个位,并存于数组中,为了是下面判断是不是对称 a/=10; }

for(;i>1;i–) {

k+=m[i-1]*t; t*=10; }

if(k==n*n)

printf(\} return 0; }

*运行结果

No. number it's square(palindrome) 1 1 1 2 2 4 3 3 9 4 11 121 5 22 484 6 26 676 7 101 10201 8 111 12321 9 121 14641

29.求具有abcd=(ab+cd)2性质的四位数

3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数。 *问题分析与算法设计

具有这种性质的四位数没有分布规律,可以采用穷举法,对所有四位数进行判断,从而筛选出符合这种性质的四位数。具体算法实现,可任取一个四位数,将其截为两部分,前两位为a,后两位为b,然后套用公式计算并判断。 *程序说明与注释 #include int main() {

int n,a,b;

printf(\for(n=1000;n<10000;n++) /*四位数N的取值范围1000~9999*/ {

a=n/100; /*截取N的前两位数存于a*/ b=n0; /*截取N的后两位存于b*/

if((a+b)*(a+b)==n) /*判断N是否为符合题目所规定的性质的四位数*/ printf(\} }

*运行结果

There are following numbers with 4 digits satisfied condition: 2025 3025 9801 30.求素数

求素数表中1~1000之间的所有素数 *问题分析与算法设计

素数就是仅能衩1和它自身整除的整数。判定一个整数n是否为素数就是要判定整数n能否被除1和它自身之外的任意整数整除,若都不能整除,则n为素数。

程序设计时i可以从2开始,到该整数n的1/2为止,用i依次去除需要判定的整数,只要存在可以整除该数的情况,即可确定要判断的整数不是素数,否则是素数。 *程序说明与注释 #include int main() {

int n1,nm,i,j,flag,count=0; do{

printf(\

scanf(\输入求素数的范围*/ }while(!(n1>0&&n1

printf(\\\n\if(n1==1||n1==2) /*处理素数2*/ {

printf(\n1=3;count++; }

for(i=n1;i<=nm;i++) /*判定指定范围内的整数是否为素数*/ {

if(!(i%2))continue;

for(flag=1,j=3;flag&&j

/*判定能否被从3到整数的一半中的某一数所整除*/ if(!(i%j))flag=0; /*若能整除则不是素数*/ if(flag) printf(++count?\} } *思考题

请找出十个最小的连续自然数,它们个个都是合数(非素数)

C/C++语言经典、实用、趣味程序设计编程百例精解(4) 31.歌德巴赫猜想

验证:2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)。

*问题分析与算法设计

为了验证歌德巴赫猜想对2000以内的正偶数都是成立的,要将整数分解为两部分,然后判断出分解出的两个整数是否均为素数。若是,则满足题意;否则重新进行分解和判断。 程序中对判断是否为素数的算法进行了改进,对整数判断―用从2开始到该整数的一半‖改为―2开始到该整数的平方根‖。原因何在请自行分析。 *程序说明与注释 #include

#include int fflag(int n); int main() { int i,n;

for(i=4;i<=2000;i+=2) {

for(n=2;n

printf(\若均是素数则输出*/ break; }

if(n==i) printf(\} }

int fflag(int i) /*判断是否为素数*/ { int j;

if(i<=1)return 0; if(i==2)return 1;

if(!(i%2))return 0; /*if no,return 0*/ for(j=3;j<=(int)(sqrt((double)i)+1);j+=2) if(!(i%j))return 0;

return 1; /*if yes,return 1*/ }

32.可逆素数

求四位的可逆素数。可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。 *问题分析与算法设计

本题的重点不是判断素数的方法,而是求一个整数的反序数。求反序数的方法是从整数的末尾依次截取最后一位数字,每截取一次后整数缩小10倍,将截取的数字作为新的整数的最后一位(新的整数扩大10倍后加上被截取的数字)。这样原来的整数的数字从低到高被不断地截取,依次作为新的整数从高到低的各位数字。 *程序说明与注释 #include #include int num(int number); int ok(int number); int main()

{

int i,count;

printf(\for(count=0,i=1001;i<9999;i+=2) //穷举全部的奇数 {

if(num(i)) //若是可逆素数,则输出

printf(count%9 ? \} return 0; }

int num(int number) { int i,j;

if(!ok(number))return 0; //判断是否为素数

for(i=number,j=0;i>0;i/=10) //按位将整数倒过来,产生反序数 {

j=j*10 + i; }

if(number

if(!ok(i)) //判断对应的反序数是否为可逆素数 { return 0; } else {

return 1; //若是可逆数素数,则返回1 } } else {

return 0; }

getchar(); return 0; }

int ok(int number) { int i,j;

if(number%2 ==0) //判断是否为素数 return 0;

j= sqrt((double)number) +1 ; //取整数的平方根为判断的上限 for(i=3;i


C语言100例,C++100例 经典、实用、趣味程序设计编程百例精解(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: