题目要求:
水仙花数是指一个N位正整数(N>=3),它的每一位上的数字的N次幂之和等于它本身。例如:153 = 13+53+33。本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有的N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
(代码主要采用while循环作为解题方法。)
代码如下:
方法确定初始值有两种形式while循环和for循环需要确定好循环的次数,在while循环中一定不要忘记为i进行赋值,必须有值才能进行循环,否则(我也没想出会发生什么)只能输出第一个printf的内容。
下面是错误示范的结果以及错误代码
#include <stdio.h> int main() { int n; scanf("%d",&n); int i ; int first; first =1; while (i<n){ first*=10; i++; } printf("first=%dn",first); i=first; while(i<first*10){ int t=i; int sum=0; do{ int d=t%10; t/=10; int p=d; int j=1; while (j<n){ p=p*d; j++; } sum =sum+p; }while (t>0); if(sum==i){ printf("%d ",sum); } i++; } return 0; }
123456789101112131415161718192021222324252627282930313233343536正确示范,案例一(一定要对i进行赋值)
#include <stdio.h> int main() { int n; scanf("%d",&n); int j,d,p,t; int first; int sum; int i =1; first =1; // for ( i = 0; i <n; i++) // { // first*=10; // i++; // } while (i<n){ first*=10; i++; } printf("first=%dn",first); i=first; while(i<first*10){ t=i; sum=0; do{ d=t%10; t=t/10; p=d; j=1; while (j<n){ p=p*d; j++; } sum =sum+p; }while (t>0); if(sum==i){ printf("%d ",i); } i++; } return 0; }
123456789101112131415161718192021222324252627282930313233343536373839404142434445'这一个是我参考的例子,大同小异,但是我没有加注释,你可以看他的注释,就在确定范围时有点不一样,也没说明我的问题,还得一点点的修改
#include <stdio.h> int main(void) {int n;//要求输入的n要大于2int d;//d存储要判断的正整数的每一位的数字int t,sum=0;int min=1,max=10;//输入n后计算的上下边界,max是min的10倍int i,j;//最内层while循环的两个重要数值scanf("%d",&n);i = n;while(--i){//取代i--,先减后判断,循环内可以少计算一次min*=10;max*=10;}while(min<max){t = min;//初始化为当前要判断的正整数sum=0;//进入循环之前要初始化while(t>0){d=t%10;t/=10;j=d;i=1;//要在进入下一个循环之前对i,j进行初始化while(i<n){j*=d;//用于存储每一位数字的N次方的结果i++;}sum += j;//对各位数字的N次方加和}if(min==sum)printf("%dn",min);min++;} }
123456789101112131415161718192021222324252627282930313233相关知识
vs水仙花数c语言代码,求水仙花数c语言代码怎么写
C语言:输出所有的水仙花数
CC++之水仙花数
C语言编写水仙花数
【C语言】求水仙花数(完整代码)
水仙花数C语言代码优化
水仙花数,C语言
判断一个数是否为水仙花数 (C语言)
加法接力赛C语言算法,C语言循环结构
传教士问题c语言
网址: C语言之水仙花数 https://m.huajiangbk.com/newsview350262.html
上一篇: 《水仙花数》——————打印出所 |
下一篇: 3497. 水仙花数 |