中科白癜风公益惠民活动 http://baidianfeng.39.net/a_yufang/171022/5781298.html每日一练之/1/14第一练
题目:
给定一个整数区间,判断这个区间出现的水仙花数,是则打印出来,否则不做处理。
分析:
认识水仙花数:
水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。
思维:
我们需要一个数“number”,这个数一定大于。
我们需要知道这个数的每一位上是多少。
我们需要将每一位上的数字三次方后给与一个和“num_all”。
将“num_all”和这个数“number”比较,是否相等。相等则需要输出,不相等则不需要处理。
算法分析因为计算机是不知道这个数是多少位数的。所以我们要帮计算机知道如何判定一个数是多少位数。这里介绍如下算法,可以判定一个数是多少位数。在C语言中,一个整数除以一个整数得到的结果仍然为整数,我们同样知道,一个数每除以一个10小数点就会左移一位。如果不够除时,会得到小数,C语言会取整数也就是0。代码演示
#include"stdio.h"intmain(){unsignedfrequency=0,number_user;//frequency位数,number_user用户输入;printf("输入整数\n");scanf("%d",number_user);for(inti=1;number_user/i!=0;frequency++){i=10*i;}printf("%d是一个%d位数",number_user,frequency);return0;}
结果如下:
输入整数是一个6位数我们判断出这个数的位数之后,应当将每一位数取下来。如何取数?代码演示:
#include"stdio.h"intmain(){printf("输入整数\n");unsignedfrequency=0,number_user;scanf("%d",number_user);for(inti=1;number_user/i!=0;frequency++,i=10*i){}for(inti=0,s,k=1;ifrequency;++i,k=k*10){s=number_user/k%10;printf("%d的第%d位是%d\n",number_user,i+1,s);}return0;}
结果如下
输入整数的第1位是的第2位是的第3位是4接下来需要将每一位数字三次方,并且将每一位数字的三次方作为和求和。(这里不做代码演示)完整案例:代码实现
#include"stdio.h"intnarcissistic(intnumber);voidPrintN(intm,intn);intmain(){printf("输入起始整数(至少三位数)\n");unsignednumber_user_begin,number_user_over;scanf("%d",number_user_begin);if(number_user_begin)printf("您输入的起始数不符合要求\n");else{printf("输入终止整数(至少三位数)\n");scanf("%d",number_user_over);if(number_user_overnumber_user_begin)printf("输入的区间要为正序\n");else{PrintN(number_user_begin,number_user_over);}}return0;}intnarcissistic(intnumber){inti=0,j=1,sum_all=0,sum=1;while(number/j!=0){i++;j*=10;}j=1;for(intk=0,s;ki;++k,j*=10){s=number/j%10;for(intl=0;li;++l){sum=sum*s;}sum_all+=sum;sum=1;}j=0;if(sum_all==number)j=1;returnj;}voidPrintN(intm,intn){for(inti=m;i=n;++i){if(narcissistic(i)==1)printf("%d是水仙花数\n",i);}return;}运行示例:
1.
输入起始整数(至少三位数)99您输入的起始数不符合要求?2.
输入起始整数(至少三位数)输入终止整数(至少三位数)错误:小于输入的区间要为正序3.
输入起始整数(至少三位数)输入终止整数(至少三位数)是水仙花数是水仙花数是水仙花数是水仙花数是水仙花数本期完END
客栈科技工作室
预览时标签不可点收录于话题#个上一篇下一篇