水仙花数是指一个3位数,它的每个位上的数字的立方和等于它本身,例如:=1^3+5^3+3^3。
C++实现水仙花数下面是用C++实现水仙花数的5种方法:
1、暴力枚举法:这是最简单的一种方法,只需要枚举所有3位数,判断是否是水仙花数即可。代码如下:
#includeiostream#includecmathusingnamespacestd;intmain(){for(inti=;i=;i++){inta=i/;intb=i/10%10;intc=i%10;if(a*a*a+b*b*b+c*c*c==i){coutiendl;}}return0;}运行结果
2、纯数学方法:由于水仙花数是3位数,所以可以确定它的范围在~之间。又因为它是由3个数字组成的,所以可以通过数学方法来确定它的每一位上的数字,然后判断是否是水仙花数即可。代码如下:
#includeiostream#includecmathusingnamespacestd;intmain(){for(inti=;i=;i++){inta=i/;intb=i/10%10;intc=i%10;if(pow(a,3)+pow(b,3)+pow(c,3)==i){coutiendl;}}return0;}
3、数组方法:可以用数组来存储每一位上的数字,然后通过循环来计算每一位的立方和,并判断是否是水仙花数。代码如下:
#includeiostream#includecmathusingnamespacestd;intmain(){for(inti=;i=;i++){intnum[3];num[0]=i/;num[1]=i/10%10;num[2]=i%10;intsum=0;for(intj=0;j3;j++){sum+=pow(num[j],3);}if(sum==i){coutiendl;}}return0;}
在这段代码中,我们首先使用一个循环遍历所有3位数,然后将每个数的每一位上的数字分别存储到数组num中。接着,使用另一个循环计算数组num中的每一位的立方和,最后判断这个立方和是否等于原数即可。
4、用递归方法实现水仙花数的代码如下:
#includeiostream#includecmathusingnamespacestd;voiddfs(intnum){if(num){return;}inta=num/;intb=num/10%10;intc=num%10;if(pow(a,3)+pow(b,3)+pow(c,3)==num){coutnumendl;}dfs(num+1);}intmain(){dfs();return0;}
在这段代码中,我们定义了一个递归函数dfs,它的作用是遍历所有3位数,并判断是否是水仙花数。
5、用字符串方法实现水仙花数的代码如下:
#includeiostream#includecmath#includestringusingnamespacestd;intmain(){for(inti=;i=;i++){strings=to_string(i);intsum=0;for(intj=0;js.size();j++){sum+=pow(s[j]-0,3);}if(sum==i){coutiendl;}}return0;}
在这段代码中,我们使用了一个小技巧:将字符串中的字符减去字符0后得到的数字就是这个字符代表的数字。例如,字符3减去字符0得到的数字就是3。
以上就是C++实现水仙花数的五种方法,大家学会了吗?