C语言:PAT练习:水仙花数( T & F)
水仙花数
算法思路1、当输入 n 位数时对所求数值划定范围并从小到大判断数值是否符合要求, 例如当 n = 3 时,范围为 100 -999 之间;
2、分别取不同位的数值,进行 n 次幂运算;
3、比较运算结果是否合理,进行输出。错误代码:
// 水仙花数 #include<stdio.h> int main() {int a;int b=1;int c=1;int d;int e;int sum=0;int f=1;int g;int h;printf("please input number(3-8):");scanf("%d",&a);while(b<a){c*=10;b++;}d=c;while(c<c*10){while(d>0){e=d%10;g=a;d/=10;while(g>=1){f*=e;g--;}sum+=f;if(sum==c){printf("水仙花数为%dn",c);}f=1;}sum=0;c++;d=c;}return 0; } 代码输出:please input number(3-8):3水仙花数为125水仙花数为153水仙花数为216水仙花数为370水仙花数为371水仙花数为407水仙花数为729--------------------------------Process exited after 22.57 seconds with return value 0请按任意键继续. .
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556代码分析:sum+=f; if(sum==c){ printf("水仙花数为%dn",c);
这里的 if 条件语句设置会出现三位数值中当其中两位的n次幂运算等于所求数值时,直接输出错误结果。
#include <stdio.h> int main() {int a;scanf("%d",&a);int b=1;int c=1;while(b<a){c*=10;b++;}while(c<c*10){int d;int e=c;int sum=0;while(e>0){d=e%10;e/=10;int f=0;int g=1;while(f<a){g*=d;f++;}sum+=g;}if(sum == c){printf("%dn",sum);}c++;} } 代码输出:3153370371407--------------------------------Process exited after 22.07 seconds with return value 0请按任意键继续. . .
123456789101112131415161718192021222324252627282930313233343536373839404142434445代码分析:
当输入整数位数 n 时首先进行转换成该整数位数下的最下值,然后对最小值进行取余后运算得到每位的 n 次幂,然后累加结果并比较当前数值是否相同。
错误程序的原因在于if(sum==c){ printf("水仙花数为%dn",c);}语句写在了取余运算循环的内部,这就导致了即使在取余运算未结束时,当小于 n 位余数满足 n 次幂的结果相加和等于运算数值,即使不是满足结果也会强行输出运算数值。
当程序存在多重循环时,一定要理清楚循环单个循环实现的意义,还有就是循环类似于函数,在循环内部定义的变量,在循环外部便不会存在。
相关知识
C语言:输出所有的水仙花数
vs水仙花数c语言代码,求水仙花数c语言代码怎么写
水仙花数C语言代码优化
Python 水仙花数练习
C语言编写水仙花数
C语言基础习题
水仙花数,C语言
加法接力赛C语言算法,C语言循环结构
【C语言】求水仙花数(完整代码)
C语言:水仙花
网址: C语言:PAT练习:水仙花数( T & F) https://www.huajiangbk.com/newsview391213.html
上一篇: 蓝桥杯练习【数论基础】——水仙花 |
下一篇: 输出所有的“水仙花数”,所谓“水 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039