水仙花数算法研究及其C语言代码实现
- 格式:docx
- 大小:19.18 KB
- 文档页数:11
c语言水仙花数的解题思路一、水仙花数的定义和特点水仙花数,又称阿姆斯特朗数,是指一个n位数,其每个位上的数字的n 次幂之和等于它本身。
例如,153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3。
水仙花数具有以下特点:1.每一位数字都不重复;2.通常情况下,水仙花数的位数较多;3.目前已知的水仙花数都是正整数。
二、C语言解题思路要找到一个n位数是否为水仙花数,可以通过遍历每一位数字,计算其n 次幂之和,然后与原数进行比较。
若相等,则为水仙花数;否则,不是。
由于位数较多,可以采用递归或循环方法进行计算。
三、算法实现步骤1.输入一个整数n,表示要查找的水仙花数的位数;2.输入一个整数m,表示要判断的数;3.初始化一个结果变量res为0;4.遍历m的每一位数字,从右到左,分别计算其n次幂之和:1) 提取当前位数字;2) 计算该位数字的n次幂;3) 将计算结果累加到res上;5.判断res与m是否相等,若相等,则输出m是水仙花数,否则输出不是。
四、代码示例与解析以下是一个简单的C语言实现:```c#include <stdio.h>int is_narcissistic_number(int m, int n) { int res = 0;while (m) {int digit = m % 10;res += pow(digit, n);m /= 10;}return res == m;}int main() {int n, m;printf("请输入位数n:");scanf("%d", &n);printf("请输入要判断的数m:");scanf("%d", &m);if (is_narcissistic_number(m, n)) {printf("%d是水仙花数。
", m);} else {printf("%d不是水仙花数。
/*(编程题)花朵数一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
例如:当N=3时,153就满足条件,因为1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为1^4 + 6^4 + 3^4 + 4^4 = 1634。
当N=5时,92727满足条件。
实际上,对N的每个取值,可能有多个数字满足条件。
程序的任务是:求N=21时,所有满足条件的花朵数。
注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。
如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。
因为这个数字很大,请注意解法时间上的可行性。
要求程序在3分钟内运行完毕。
*//*本程序比较容易理解。
执行时间40秒左右(P6100处理器,2G内存,WIN7系统)。
思路:任何一个水仙花数,比如153=1^3+5^3+3^3,里面包括1个1,1个5,1个3。
如果是513,315,351这样的数字……,虽然这几个不是水仙花数,但这几个数字中1,3,5出现的次数和水仙花数是一样的……那么513,315,351这些数字,每位上数字的和应该就是水仙花数。
如果是从1000……-9999……的枚举法,我想问题肯定大了。
而如果采用上面的方法,这样的话,采用对数字出现次数进行枚举会让程序加快很多。
*/#include <stdio.h>#include <time.h>int num_time[10]={0}; //num_time[10]用来得到0-9数字出现的个数int sum[10][21]={(0,0)},sumc[10][21]={(0,0)}; //sum数组用来计算出0-9的21次方。
sumc用来计算数字出现次数*它的21次方int count=0; //计算得到几个水仙花数了,得到2个以后就结束程序void initProgramm() //这个函数用来获得0-9的21次方,存在sum数组里{int i,j,k;for(i=0;i<10;i++)sum[i][20]=i;for(k=2;k<10;k++){for(i=1;i<21;i++){for(j=20;j>=0;j--){sum[k][j]*=k;}for(j=20;j>0;j--){sum[k][j-1]+=sum[k][j]/10;sum[k][j]%=10;}}}}void check(int i0,int i1,int i2,int i3,int i4,int i5,int i6,int i7,int i8,int i9) //检测数字是不是水仙花数{int i,j;int getAdd[21]={0};for(j=0;j<21;j++) //把数字出现次数*它的21次方{sumc[1][j]=sum[1][j]*i1;sumc[2][j]=sum[2][j]*i2;sumc[3][j]=sum[3][j]*i3;sumc[4][j]=sum[4][j]*i4;sumc[5][j]=sum[5][j]*i5;sumc[6][j]=sum[6][j]*i6;sumc[7][j]=sum[7][j]*i7;sumc[8][j]=sum[8][j]*i8;sumc[9][j]=sum[9][j]*i9;}for(i=0;i<10;i++) //进位for(j=20;j>0;j--){sumc[i][j-1]+=sumc[i][j]/10;sumc[i][j]%=10;}for(i=0;i<10;i++) //得到一个数每位的21次方的和,就是把sumc叠加起来for(j=20;j>=0;j--)getAdd[j]+=sumc[i][j];for(i=20;i>0;i--) //进位{getAdd[i-1]+=getAdd[i]/10;getAdd[i]%=10;}int j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0,j9=0,j0=0;for(i=20;i>=0;i--) //用来判断和里面每个数字出现的次数{switch(getAdd[i]){case 0:j0++;break;case 1:j1++;break;case 2:j2++;break;case 3:j3++;break;case 4:j4++;break;case 5:j5++;break;case 6:j6++;break;case 7:j7++;break;case 8:j8++;break;case 9:j9++;break;}}/*如果一个数字,和里0-9出现的次数与这个数字里0-9出现的次数相同,那么和就应该是水仙花数(第一位数字不能为0)*/if((i0==j0)&&(i1==j1)&&(i2==j2)&&(i3==j3)&&(i4==j4)&&(i5==j5)&&(i6==j6)&&(i7==j7)&&(i8==j8)&&(i9==j9)&&(getAdd[0]!=0)){printf("\n");count++;for(i=0;i<21;i++)printf("%d",getAdd[i]);printf("\n");}}void main(){int t,t1,t2;initProgramm();t1=time(NULL);int i0,i1,i2,i3,i4,i5,i6,i7,i8,i9;for(i9=0;i9<10;i9++){for(i0=1;i0<22;i0++){if(count==2) //出现2个水仙花数以后breakbreak;if(i9+i0==21) //几个数字的出现次数和为21以后就break,因为后面的数字出现次数和一定大于21,就超过了21位{ check(i0,0,0,0,0,0,0,0,0,i9);break;}for(i2=0;i2<22;i2++){if(count==2)break;if(i9+i0+i2==21){ check(i0,0,i2,0,0,0,0,0,0,i9);break;}for(i3=0;i3<22;i3++){if(count==2)break;if(i9+i0+i2+i3==21){ check(i0,0,i2,i3,0,0,0,0,0,i9);break;}for(i4=0;i4<22;i4++){if(count==2)break;if(i9+i0+i2+i3+i4==21){ check(i0,0,i2,i3,i4,0,0,0,0,i9);break;}for(i5=0;i5<22;i5++){if(count==2)break;if(i9+i0+i2+i3+i4+i5==21){ check(i0,0,i2,i3,i4,i5,0,0,0,i9);break;}for(i6=0;i6<22;i6++){if(count==2)break;if(i9+i0+i2+i3+i4+i5+i6==21){ check(i0,0,i2,i3,i4,i5,i6,0,0,i9);break;}for(i7=0;i7<22;i7++){if(count==2)break;if(i9+i0+i2+i3+i4+i5+i6+i7==21){ check(i0,0,i2,i3,i4,i5,i6,i7,0,i9);break;}for(i8=0;i8<22;i8++){if(count==2)break;if(i9+i0+i2+i3+i4+i5+i6+i7+i8==21){ check(i0,0,i2,i3,i4,i5,i6,i7,i8,i9);break;}for(i1=0;i1<22;i1++){if(count==2)break;if(i9+i0+i2+i3+i4+i5+i6+i7+i8+i1==21){check(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9);break;}}}}}}}}}}}t2=time(NULL);t=t2-t1;printf("\n%d s\n",t);}。
c语⾔⽔仙花数作业,c语⾔⽔仙花数(c语⾔⽔仙花数的编程)C语⾔计算出"⽔仙花"数,代码如下:运⾏结果如下:扩展资料 解题思路:这⾥提供了⼀种算法,即使⽤三个for循环确定三位数字,最外层的for循环即确定百位上的数字.“⽔仙花数”程序怎么写啊代码如下:#include int main() { printf("输出⽔仙花数:\n"); int i=100; for( ; i<1000; i++){ int num_0 = i%10; int num_1 =i/10%10; int num_2 = i/10/10%10; if.#include void main() { int a,b,c,s; s=a*100+b*10+c; for(a=1;aLZ你好~ ⾸先你要理解啥是⽔仙花数:⽔仙花数是指⼀个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本⾝。
(例如:1^3 + 5^3 + 3^3 = 153) 以上来⾃百.#include main() { int n,i,j,k; for(n=100;n把if语句块套在for循环⾥才⾏。
#include main() { int n,i,j,k; for(n=100;n<. k="n%10;" if .>最近学C语⾔ 作业⾥⾯有个写程序求⽔仙花数的 尝试得写了写 #include #.#include#include main() { int a,b,c,Y; int sum=100; while(sum<=999) { 百a=sum/100; b=sum%100/10; c=sum%10;Y=a*a*a+b*b*b+c*c*c; if(Y==sum)//判断.现写⼀个程序给我可以吗?跟⽹上其他有点差别就⾏了,不要复制粘贴的。
.#include int main(int argc, char **argv) { int i; int g ,s,b; //定义个位制,⼗位,百位上的知数 for(i=100;i<1000;i++){ //从100到1000查询⽔仙花数 g=i%10; //取出.严格的⽔仙花是三位数,并且其每位数的三次⽅的和等于它的本⾝。
c语言水仙花数的概念-回复C语言水仙花数的概念一. 引言在C语言编程中,水仙花数是一个经典的概念。
它不仅是一个数学问题,也是学习和探索编程的一个绝佳机会。
本文将详细解释什么是水仙花数,并提供一个步骤性的指南,以帮助读者理解和实现这个概念。
二. 水仙花数的定义水仙花数,也被称为自恋数或亲花数,是指一个三位数,它的每个位上的数字的立方和等于它本身。
举例来说,153是一个水仙花数,因为1的立方加上5的立方加上3的立方等于153。
水仙花数是对自然数的一种特殊形式的探索,它既有数学的美感,也有令人着迷的编程实现之道。
三. 实现计算水仙花数的算法下面将介绍一种简单的算法来计算水仙花数:1. 定义一个循环,从100到999,以便对所有的三位数进行检查。
2. 在每次迭代中,将当前的三位数分解成百位、十位和个位上的数字。
3. 对每个数字进行立方操作,并将结果相加。
4. 比较结果和原始的三位数,如果相等,则打印该数字。
下面是一个示例程序:c#include <stdio.h>int main() {int num, digit, sum;printf("水仙花数: ");for (num = 100; num <= 999; num++) { sum = 0;int temp = num;while (temp > 0) {digit = temp 10;sum += digit * digit * digit;temp = temp / 10;}if (sum == num) {printf("d ", num);}}return 0;}四. 程序解析让我们逐步分析这个程序:1. 首先,我们声明了需要使用的变量,包括num(用来存储当前检查的数字),digit(用来存储当前位上的数字)和sum(用来存储每位数字立方和)。
2. 我们通过一个循环,从100到999,依次检查每个三位数。
用C#编程,写出一个求水仙花数的算法!1、水仙花数是指一个n(n>=3)位数,每一位数字的n次幂的和正好等于这个数本身。
例如,153是一水仙花数,因为153=1的3次方+5的3次方+3的3次方.using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace NarcissusNumber{class Program{public static void Main(string[] args){int a;string s;do{Console.WriteLine("3----找出三位数所有的水仙花数!");Console.WriteLine("4----找出四位数所有的水仙花数!");Console.WriteLine("5----找出五位数所有的水仙花数!");Console.WriteLine("34---你选择找出三、四位数的水仙花数!");Console.WriteLine("45---你选择找出四、五位数的水仙花数!");Console.WriteLine("35---你选择找出三、四、五位数的水仙花数!");Console.WriteLine("0----退出");Console.Write("请选择操作(0,3,4,5, 34, 45, 35):");s= Console.ReadLine();a = int.Parse(s);switch (a){case0:Console.WriteLine("你选择退出!");break;case3:Console.WriteLine("你选择找出三位数的水仙花数!");Funtion(a);break;case4:Console.WriteLine("你选择找出四位数的水仙花数!");Funtion(a);break;case5:Console.WriteLine("你选择找出五位数的水仙花数!");Funtion(a);break;case34: Console.WriteLine("你选择找出三、四位数的水仙花数!");Funtion(a);break;case45: Console.WriteLine("你选择找出四、五位数的水仙花数!");Funtion(a);break;case35: Console.WriteLine("你选择找出三、四、五位数的水仙花数!");Funtion(a);break;default: Console.WriteLine("你的输入是不合理的!请重先选择!");break;}Console.WriteLine();// Console.Clear(); /*清屏*/} while (a!=0);}/*******************输出水仙花数的算法*******************************/static int Funtion(int s){int i;int j;int k;int n;int m;int l;if (s==3) /*输出100-999的水仙花数*/{for(n=100;n<999;n++){i = n / 100;j = n / 10 - i * 10;k = n % 10;if (n==Recursion(i,s) + Recursion(j,s) + Recursion(k,s))Console.WriteLine(n);}}else if (s == 4) /*输出1000-9999的水仙花数*/{for (n = 1000; n <= 9999; n++){i = n / 1000;j = n / 100 - i * 10;k = n / 10 - i * 100 - j * 10;l = n % 10;if (n == Recursion(i, s) + Recursion(j, s) + Recursion(k, s) + Recursion(l, s))Console.WriteLine(n);}}else if(s==5) /*输出10000-99999的水仙花数*/{for (n = 10000; n <= 99999; n++){i = n / 10000;j = n / 1000 - i * 10;k = n / 100 - i * 100 - j * 10;l = n / 10 - i * 1000 - j * 100 - k * 10;m = n % 10;if (n == Recursion(i, s) + Recursion(j, s) + Recursion(k, s) + Recursion(l, s) + Recursion(m, s))Console.WriteLine(n);}}else if (s ==34) /*输出100-9999的水仙花数*/{for (n = 100; n <= 9999; n++){i = n / 1000;j = n / 100 - i * 10;k = n / 10 - i * 100 - j * 10;l = n % 10;if (i != 0 && n==Recursion(i, 4) + Recursion(j, 4) + Recursion(k, 4) + Recursion(l, 4))Console.WriteLine(n);if (n== Recursion(j, 3) + Recursion(k, 3) + Recursion(l, 3))Console.WriteLine(n);}}else if(s == 45) /*输出1000-9999的水仙花水*/{for (n = 1000; n <= 99999; n++){i = n / 10000;j = n / 1000 - i * 10;k = n / 100 - i * 100 - j * 10;l = n / 10 - i * 1000 - j * 100 - k * 10;m = n % 10;if (i != 0 && n == Recursion(i, 5) + Recursion(j, 5) + Recursion(k, 5) + Recursion(l, 5) + Recursion(m, 5))Console.WriteLine(n);if (n == Recursion(j, 4) + Recursion(k, 4) + Recursion(l, 4) + Recursion(m, 4))Console.WriteLine(n);}}else/* 输出100-99999的水仙花数*/{for (n = 100; n <= 99999; n++){i = n / 10000;j = n / 1000 - i * 10;k = n / 100 - i * 100 - j * 10;l = n / 10 - i * 1000 - j * 100 - k * 10;m = n % 10;if (i != 0 && n == Recursion(i, 5) + Recursion(j, 5) + Recursion(k, 5) + Recursion(l, 5) + Recursion(m, 5))Console.WriteLine(n);else if (j != 0 && n == Recursion(j, 4) + Recursion(k, 4) + Recursion(l, 4) + Recursion(m, 4))Console.WriteLine(n);else if (n== Recursion(k, 3) + Recursion(l, 3) + Recursion(m, 3))Console.WriteLine(n);}}return0;}/*********************用递归求数n的k次方*******************************/static int Recursion(int n,int k){int m;if (k == 1) return n;else{m=n*Recursion(n,k-1);}return m;}}}。
在各种编程语⾔中实现求取⽔仙花数的⽅法(⾮⾼精度)在各种编程语⾔中实现求取⽔仙花数的⽅法(⾮⾼精度)。
PHP “⽔仙花数”实现代码<?phpfor ($i=100;$i<1000;$i++) {$m = floor($i/100); //分解出百位$n = floor($i/10)%10;//分解出⼗位$k = floor($i%10);//分解出个位if ($i == ($m*$m*$m+$n*$n*$n+$k*$k*$k)) {echo $i."<br/>";}}>PHP 所有位数理论输出/** * ⽔仙花数为不⼩于3位的数字,每位数字的N次幂的和等于该数字.N为该数字的位数* @name daffodilsNum ⽔仙花数* @param $places ⽔仙花位数 >=3*/function daffodilsNum($places=3){// (0); //设置超时为不限制,如果提⽰30秒超时,可以开启本控制//$begin= (); // 开始时间//定义位数if(!defined('PLACES')) define('PLACES',is_numeric($places)?$places:3);if(PLACES>=3){$min=pow(10,PLACES-1); //选数范围起始位置$max=pow(10,PLACES); //选数范围结束位置//开始选数for($i=$min,$out='';$i<$max;$i++){$sum=0; //当前选数下各个幂值的和$arr= ($i); //以字符串⽅式分割选数for($j=0;$j<PLACES;$j++){//对每个数字作幂操作并累加$sum+=pow($arr[$j],PLACES);if($sum>$i){//如果当前累加已⼤于选数,则跳出循环break;}}if($sum==$i){//如果符合定义,将该数字添加到输出队列$out.=$i.'<br/>';}}//输出队列echo $out;//echo "<br/>".(microtime()-$begin); //输出耗时,当脚本开始时间开启时有效}else{//$this->error('错误的位数'); //提⽰错误的位数}}语⾔的"⽔仙花数"实现代码#include <stdio.h>int main(){int i,d1,hub,transit;for(i=100;i<=9999;++i){for(hub=0 ,transit=i,d1=123; transit!=0;){d1=(transit%10)*(transit%10)*(transit%10);*/hub=hub+d1;transit=transit/10;}if(hub==i) printf("⽔仙花数%d\n",i);}return 0;}PASCAL 实现代码program shuixianhuashu;vara,b,c:integer;beginfor a:=1 to 9 dofor b:=0 to 9 dofor c:=0 to 9 doif a*a*a+b*b*b+c*c*c=100*a+10*b+c then writeln(100*a+10*b+c); end.或:program sxh;var a,b,c,d:integer;beginfor a:=100 to 999 do beginb:=a mod 10;c:=a mod 100 div 10;d:=a div 100;if b*b*b+c*c*c+d*d*d=a then writeln(a);end;end.或program abcd;vara,b,c,i,t:integer;begini:=100;repeata:=trunc(i/100);b:=trunc(i/10)-a*10;c:=i-trunc(i/10)*10;t:=a*a*a+b*b*b+c*c*c;if i=tthen writeln(i,'=',a,'^3+',b,'^3+',c,'^3');i:=i+1until i>999end.Visual Basic 的"⽔仙花数"实现代码Private Sub Command2_Click()Dim i As Integer, a As Integer, b As Integer, c As IntegerFor i = 100 To 999 Step 1a = i \ 100b = (i - 100 * a) \ 10c = i - 100 * a - 10 * bIf a ^ 3 + b ^ 3 + c ^ 3 = i Then Print iNext iEnd SubFORTRAN 的"⽔仙花数"实现代码WRITE(*,30)DO 10 K=100,999IA=K/100IB=MOD(K,100)/10WRITE(*,20)K, IA,IB,IC10 CONTINUE20 FORMAT(5X,4I4)30 FORMAT(5X,18HN=I**3+J**3+K**3) STOPENDC++ 编译器上的⽔仙花数实现代码#include<iostream>using namespace std;int main(){int a,q,w,e;for(a=100;a<1000;++a){q=a/100;w=(a-q*100)/10;e=(a-q*100-w*10);if(a==q*q*q+w*w*w+e*e*e)cout<<a<<"是⽔仙花数"<<endl;};return 0;}python 中实现的代码for i in range(1,10):for j in range(0,10):for k in range(0,10):if i*100+j*10+k==i*i*i+j*j*j+k*k*k:print i*100+j*10+kJava 中实现的代码public class NumberOfDaffodils {public static void main(String[] args) {List<Long> numbers = new ArrayList<Long>(); for(long i = 100; i < Long.MAX_VALUE ; i++){ if(match(i)){numbers.add(i);}}System.out.println(numbers);}private static boolean match(long in) {//统计位数int count = (in+"").length();//记录每位数字long temp = 0;//辗转取余的保存数long num = in;//求和数long sum = 0;for(int i = count ; i > 0 ; i--){temp = num/(long)Math.pow(10,i-1);num = num%(long)Math.pow(10,i-1);sum+=Math.pow(temp,count);}return in == sum;}}C# ASP.N 中的实现代码for (int i = 100; i < 1000; i++){int bai = 0;int shi = 0;bai = i / 100;baiyushu = i % 100;shi = baiyushu / 10;ge = baiyushu % 10;if (i == bai * bai * bai + shi * shi * shi + ge * ge * ge){Console.WriteLine("⽔仙花数:" + i + "<br>");}}补充C#⽔仙花数实现代码(不定位数)/// <summary>/// 判断⼀个数是否是⽔仙花数/// </summary>/// <param name="num">要判断的数</param>/// <returns>判断结果:true-是,false-否</returns>bool isWaterFlower(int num){if (num <= 0){return false;}int temp = num;//将要判断的数值各位上的数字拆开放在集合中ArrayList list = new ArrayList();while (temp > 0){list.Add(temp % 10);temp /= 10;}//判断各位上的数字位数次⽅之后是否等于要判断是数,是的话则为⽔仙花数int sum = 0;foreach (int i in list){int mul = 1;for (int j = 0; j < list.Count; j++){mul *= i;}sum += mul;}return sum == num;}javascript +html 实现可变位数的运算<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>⽆标题⽂档</title><script type="text/javascript">function fun(){//取得参量位数var valnum=parseInt(document.frm.input.value);//求得符合参量位数的最⼤值和最⼩值var highnum=Math.pow(10,valnum)-1;var lownum=Math.pow(10,valnum-1);//输出队列的组成部分var output="共有个数:",res_str="";//a为i分解为的下脚值,num为符合规则的⽔仙花的个数var a=0,num=0;//遍历所有符合参量位数的数for(i=lownum;i<=highnum;i++){//res为⽔仙花数规则值,即n位的数的每位数的n次幂的和,预置为0var res=0;//分解出当前i的每位数并存如//求得⽔仙花数值res=Math.pow(parseInt(new_i[a]),valnum)+res;}//判断符合⽔仙花数的个数,如符合则将⽔仙花数并⼊输出队列if(res==i){num++;res_str=res_str+"<br>"+res;}}//输出队列if(valnum<3){output="你输⼊了⽆效位数!";}else{output=output+num+res_str;}//输出document.getElementById("divnum").innerHTML=output;}</script></head><body><form name="frm"><label>请输⼊⽔仙花的位数(N>=3):</label><input type="text" name="input" value=""> <input value="运算" type="button" onclick="fun()" /></form><div id="divnum" style=" position:absolute;left:100px;width:200px;top:100px;"></div> </body></html>asp 中实现的代码<%dim a,b,c,d,m,n,zi=1for i=100 to 999a=mid(i,1,1)b=mid(i,2,1)c=mid(i,3,1)d=a*a*am=b*b*bn=c*c*cz=d+m+nif z=i thenresponse.write z & "<br>"end ifnext%>Visual FoxPro ⽤表单实现法(只计3位)⽅法⼀,clearfor a=1 to 9for b=0 to 9for c=0 to 9x=a*100+b*10+cif x=a^3+b^3+c^3xendifendforendforendfor⽅法⼆,(1)创建 Form1并添加 Text1与 Command1(2)修改Command1的Caption属性为“计算并显⽰”(3)为Form1添加⽅法sxh(4)修改⽅法sxh代码如下para xx1=int(x%10)x2=int(x/10)%10return .t.elsereturn .f.endif(5)为Command1的编写如下的事件代码:thisform.currentx=thisform.width/2thisform.currenty=thisform.height/2thisform.print("⽔仙花数是:")for m=100 to 999thisform.text1.value=msure=thisform.sxh(m)if sure=.t.thisform.print(str(m,4)+space(3))inkey(0.5)endiffor 延迟=1 to 20000yiru=2008610029endforendforthis.enabled=.f.QBASIC⽔仙花数1—999999之间CLSFOR i = 1 TO 999999e$ = STR$(i)a$ = MID(e$, 1, 1)b$ = MID(e$, 2, 1)c$ = MID(e$, 3, 1)d$ = MID(e$, 4, 1)a = VAL(a$) ANDb = VAL(b$) ANDc = VAL(c$) ANDd = VAL(d$) IF i = a ^ 4 + b ^ 4 + c ^ 4 + d ^ 4 THEN PRINT i;NEXT iENDPB 实现的⽅法(只计3位数)int s,a,b,cfor s=100 to 999a=integer(s/100)b=integer((s - a*100)/10)c=s - integer(s/10)*10if s=a^3+b^3+c^3 thenmessagebox("",s)end ifnextActionScript实现的⽅法(只计3位数)var n:int;var m:int;for (var i:int=1; i<=9; i++) {for (var j:int=1; i<=9; j++) {for (var k:int=1; i<=9; k++) {m=i*100+j*10+k;if (m==i*i*i+j*j*j+k*k*k) {n++;trace(m);}}}}Delphi实现的⽅法(100-999)var a,b,c,d:integer;beginfor a:=100 to 999 doc:=a div 10 mod 10;d:=a mod 10;if b*b*b+c*c*c+d*d*d=a then memo1.Lines.Add(inttostr(a)) endend;MATLAB中实现的⽅法(100-999)for m=100:999m1=fix(m/100);m2=rem(fix(m/10),10);m3=rem(m,10);if m==m1^3+m2^3+m3^3disp(m)endend或者:Mathematica实现⽅法(可现不定位数解)n=Input["请输⼊⼤于2的⾃然数n:"];For[i=10^(n-1),i<10^n-1,i++,If[Total[IntegerDigits^IntegerLength]==i,Print]]添加⼀种C++的算法#include<iostream>#include<cmath>using namespace std;void main(){int a,b,c,e,f,g;double d;b=1;f=0;a=100;e=0;c=g=a;A:do{a/=10;b++;}while(a>10);do{d=g%10;g/=10;e+=pow(d,b);f++;}while(f!=b+1);if(e==c){cout<<c<<"\n";c++;a=g=c;b=1;f=0;e=0;goto A;}else{c++;a=g=c;b=1;f=0;e=0;goto A;}}BASH 脚本实现计算100-999之内数dofor (( b=0; b<10; b++ ))dofor (( c=0; c<10; c++ ))donumber1=$((a*100+b*10+c))number2=$((a**3+b**3+c**3))if [ $number1 -eq $number2 ]; thenecho "Found number $number1"fidonedonedone易语⾔代码求指定范围内⽔仙花数.版本 2.⼦程序取出⽔仙花数, 整数型, , 返回范围内⽔仙花数个数,如果范围过⼤将会⼗分耗时.参数起始数字, 整数型, , 从此数开始判断是否为⽔仙花数.参数结束数字, 整数型, , 此数必须⼤于起始数字.参数保存得到⽔仙花数的数组, 整数型, 可空数组.局部变量数字数组, ⽂本型, , "0".局部变量⽔仙花数, 整数型, , "0".局部变量总和, 整数型.局部变量计次, 整数型.局部变量计次2, 整数型.如果真 (起始数字 > 结束数字)清除数组 (保存得到⽔仙花数的数组)返回 (0).如果真结束.变量循环⾸ (起始数字, 结束数字, 1, 计次).计次循环⾸ (取⽂本长度 (到⽂本 (计次)), 计次2)加⼊成员 (数字数组, 取⽂本中间 (到⽂本 (计次), 计次2, 1))处理事件 ().计次循环尾 ().计次循环⾸ (取数组成员数 (数字数组), 计次2)总和 = 总和 + 求次⽅ (到数值 (数字数组 [计次2]), 取⽂本长度 (到⽂本 (计次)))处理事件 ().计次循环尾 ().如果真 (总和 = 计次)加⼊成员 (⽔仙花数, 计次).如果真结束处理事件 ().变量循环尾 ()保存得到⽔仙花数的数组 = ⽔仙花数返回 (取数组成员数 (⽔仙花数))vb代码判断⽔仙花数Dim a() As Integern = InputBox("请输⼊⼀个n位正整数" & Chr(10) & "n⼤于等于3", "⽔仙花数", 153) Dim i As Integerm = Len(n)ReDim a(1 To m) As IntegerFor i = 1 To ma(i) = Val(Mid(n, i, 1))Next iFor i = 1 To ms = a(i) ^ m + sNext iIf s = Val(n) ThenMsgBox "是⽔仙花数"ElseMsgBox "不是⽔仙花数"End If再加⼀种C语⾔⽅法:#include <math.h>int main(){unsigned long fr,to,n,m,k,sum;int nLog,numlen,brPoint=1;//输⼊100~约4000000000(unsigned long)间的范围printf("Input Number Range ('from' 'to'):"); scanf("%lu %lu",&fr,&to);for(n=fr;n<=to;n++){//算出n有多少位nLog = log10(n);numlen = floor(nLog)+1;//数n 的各位数字的位数次幂的和m=n;sum=0;while(m>0){k=m%10;sum+=pow(k,numlen);m=m/10;}//若是⽔仙花数,输出。
您好!
C语言输出水仙花数的具体分析和实现流程如下:
1、水仙花数的含义
“水仙花数”是一个三位数其各位数字的立方和等于该数本身。
例如:3^3 + 7^3+ 0^3 = 370
2、算法分析
把给出的某个三位数的个位、十位、百位分别拆分,并求其立方和(设为sum),若sum与给出的三位数相等,则为“水仙花数”。
3、算法设计
“水仙花数”是一个三位数,可以确定该数的取值范围是100〜999。
对应的循环条件如下:
for (n=10; n<1000; n++) {}
将n整除以100,得出n在百位上的数字h。
将(n-i*100)整除以10, 得出n在十位上的数字t。
将n对10取余,得出n在个位上的数字a。
求得h,t,a 三个数字的立方和是否与n相等,如果相等则证明该数为水仙花数。
4、代码实现
#include <stdio.h>
int main() {
int h, t, a, n;
printf("result is:");
for ( n=100; n<1000; n++ ) { /*整数的取值范围*/
h = n / 100;
t = (n-h*100) / 10;
a = n % 10;
if (n == h*h*h + t*t*t + a*a*a) /*各位上的立方和是否与原数n相等*/ printf("%d ", n);}
printf("\n");
return 0;}
——内容选自网络,仅供参考。
c语言水仙花数的解题思路
摘要:
I.引言
- 介绍水仙花数的概念
- 说明用C 语言解决水仙花数的意义
II.水仙花数的性质
- 定义水仙花数
- 分析水仙花数的性质
- 总结水仙花数的特征
III.C 语言解决水仙花数的思路
- 算法一:暴力枚举法
- 算法二:数学归纳法
- 算法三:动态规划法
- 比较三种算法的优劣
IV.C 语言实现
- 实现算法一
- 实现算法二
- 实现算法三
- 总结实现过程
V.结论
- 总结C 语言解决水仙花数的方法
- 展望水仙花数问题的未来研究方向
正文:
I.引言
水仙花数,是指一个三位数,其各位数字的立方和等于该数本身。