admin管理员组

文章数量:1794759

C语言入门:计算所有N位水仙花数

C语言入门:计算所有N位水仙花数

C语言:计算所有N位水仙花数


输入数字 n 控制几位数

自动计算该位数中所有的回归数

程序边界3至7位数

#include<stdio.h> #include<stdlib.h> void main() { int n; //位数,需要输入 int min,max; //n位数的最小、最大数,当n确定后,如n=5:则min是10000,max是99999 int data; //要判断的数据,循环取从min到max的数,循环体内判断data是不是水仙花数 // 判断n位数data是否水仙花数,即判断data的每位数的n次幂的和是否等于data本身。 int temp,d; //取组成data的每位数所需的变量。 // data分解成(其他位+最低位),temp是取掉最低位的其他位,d是取到的最低位,如12345:temp=1234时d=5 int pow,i; //pow是d的n次幂,以循环变量i控制d乘以自身n次得到pow int sum; //所有数位的n次幂的和,即pow的累加和 printf("请输入所求水仙花数的位数(3-7之间):\\n"); scanf("%d",&n); //根据输入的位数n,求出min:min=10的(n-1)次幂,1循环乘以n-1次10就可以得到 min=1; for(i=1;i<n;i++) { min = min*10; } //根据min求出max:max=min*10-1 max=min*10-1; //从min到max,遍历每个n位数 for(data=min;data<=max;data++) { //对temp取最低位d,计算其n次幂pow,累加到sum,去掉最低位的其他位赋给temp再次循环 sum = 0; temp = data; while(temp>0) //只要temp>0,就还有数位要处理 { d = temp % 10; //计算d的n次幂给pow pow = 1; for(i=1;i<=n;i++) { pow = pow * d; } //将本次循环所取到的数位d的n次幂pow累加到sum sum = sum + pow; //去掉最低位的数据参加下次循环,当temp是个位整数,temp/10=0 会结束循环 temp=temp / 10; } if(sum==data)//每位数n次幂的和sum等于data本身,则data是水仙花数 { printf("%d\\n",data); } } system("pause"); }

 

本文标签: 水仙花入门语言