c语言设计一个计算30位数,C语言算练习.doc

C语言算练习

21.4位反序数

设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:

1234的反序数是4321。

*问题分析与算法设计可设整数N的千、百、十、个位为i、j、k、l,其取值均为0~9,则满足关系式:(i*103+j*102+10*k+l)*9=(l*103+k*102+10*j+i)的i、j、k、l即构成N。

*程序说明与注释#includeint main(){int i;for(i=1002;i<1111;i++) /*穷举四位数可能的值*/if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9)/*判断反序数是否是原整数的9倍*/printf("The number satisfied stats condition is: %d\n",i);/*若是则输出*/}

*运行结果The number satisfied states condition is:1089

22.求车速一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和

从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?

新的对称数是多少?

*问题分析与算法设计根据题意,设所求对称数为i,其初值为95589,对其依次递增取值,将i值的每一位分解后与其对称位置

上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。

*程序说明与注释#includeint main(){int t,a[5]; /*数组a存放分解的数字位*/long int k,i;for(i=95860;;i++) /*以95860为初值,循环试探*/{for(t=0,k=100000;k>=10;t++) /*从高到低分解所取i值的每位数*/{ /* 字,依次存放于a[0]~a[5]中*/a[t]=(i%k)/(k/10); k/=10;}if((a[0]==a[4])&&(a[1]==a[3])){printf("The new symmetrical number kelometers is:%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);printf("The velocity of the car is: %.2f\n",(i-95859)/2.0);break;}}}

*运行结果The new symmetrical number kelometers is:95959.The velocity of the car is:50.00

*思考题将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求

不超过1993的最大的二进制的对称数。

23.由两个平方三位数获得三个平方二位数

已知两个平方三位数abc和xyz,其中a、b、c、x、y、z未必是不同的;而ax、by、cz是三个平方二位数。

请编程求三位数abc和xyz。

*问题分析与算法设计任取两个平方三位数n和n1,将n从高向低分解为a、b、c,将n1从高到低分解为x、y、z。判断ax、by、cz

是否均为完全平方数。

*程序说明与注释#include#includevoid f(int n,float* s);int main(){int i,t;float a[3],b[3];print("The possible perfect squares combinations are:\n");for(i=11;i<=31;++i) //穷举平方三位数的取值范围for(t=11;t<=31;++t){f(i*i,a); //分解平方三位数的各位,每位数字分别存入数组中f(t*t,b);if(sqrt(a[0]*10+b[0]) == (int)sqrt(a[0]*10+b[0]) && sqrt(a[1]*10+b[1]) == (int)sqrt(a[1]*10+b[1])&& sqrt(a[2]*10+b[2]) == (int)sqrt(a[2]*10+b[2]) ){printf("%d and %d\n,i*i,t*t"); //若三个新的数均是完全平方数,则输出}}}

/* ———————————————-分解三位数n的各位数字,将各个数字从高到低依次存入指针s所指向的数组中————————————————*/

void f(int n,float* s){int

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值