C语言水仙花数的实现

什么水仙花数?

水仙花数其实是自幂数的一种,自幂数是一个自然数中它每个个位上的数字n次方相加之和为它本身!,这里n可以称为立方指数!

而水仙花数的n次方的n是3,这里3可以称为自然数的立方指数
次方即为自身相乘多少次,一般用^表示,比如1的3次方表示为:1^3
比如153这个数是一个水仙花数,为什么呢?

下面我们用公式来看一下:
153有三个数位
1、5、3
1的三次方为1:
1*1*1=1
列:
1*1=1
1*1=1
5的三次方为125:
5*5*5=125
列:
5*5=25
25*5=125
3的三次方为27
3*3*3=27
列:
3*3=9
9*3=27
然后再将三个次方的和加一起:
1+125+27=153

所以自然数的153是一个水仙花数,因为它的三个数为拆分为1、5、3的自然数,而1^3+5^3+3^3刚好等于153,也就是原数!
说的简单一点就是,一个整数自然数上的个位自然数的3次方加起来等于这个整数自然数,且立方指数为3的即为水仙花数!

其实还有很多其他的:
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
由于一些类型存储大小可能不能存储太高位,需要使用一些高精度的存储类型!
在啰嗦几句,三位的水仙花数意味着数字长度只能是三位,上面说的立方指数为什么是3?
因为水仙花的立方指数计算规则是它有多少个个位!立方指数为3的才算水仙花数!
所以如果自然数有四个个位那么立方指数就是4,也就是四叶玫瑰花数!

问题描述

输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。

问题分析

根据“水仙花数”的定义,判断一个数是否为“水仙花数”,最重要的是要把给出的三位数的个位、十位、百位分别拆分,并求其立方和(设为s),若s与给出的三位数相等, 三位数为“水仙花数”,反之,则不是。

算法设计

“水仙花数”是指满足某一条件的三位数,根据这一信息可以确定整数的取值范围是 100〜999。对应的循环条件如下:

for(n=10; n<1000; n++)
{
  //......
}

对代码的说明:

  • 将n整除以100,得出n在百位上的数字hun。
  • 将(n-i*100)整除以10(或将n先整除以10再对10求模n/10%10),得出n在十位上的数字ten。
  • 将n对10取余,得出n在个位上的数字ind。
  • 求得这三个数字的立方和是否与其本身相等,若相等,则该数为水仙花数。

对于每个位置上的数值将其拆分的算法有很多种,根据不同情况选择不同算法(对于同一问题不同算法的效率有时会相差很多)。

下面是完整的代码:

#include <stdio.h>
int main()
{
  int hun, ten, ind, n;
  printf("result is:");
  for( n=100; n<1000; n++ ) /*整数的取值范围*/
  {
    hun = n / 100;
    ten = (n-hun*100) / 10;
    ind = n % 10;
    if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind) /*各位上的立方和是否与原数n相等*/
      printf("%d ", n);
  }
  printf("\n");

  return 0;
}

运行结果:
result is:153  370  371  407

到此这篇关于C语言水仙花数的实现的文章就介绍到这了,更多相关C语言水仙花数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言经典算法例题求100-999之间的“水仙花数

    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方. 实现代码如下 #include <iostream> #include <Cmath> using namespace std; /* 求100-999之间的水仙花数 */ int main() { int number,hun,ten

  • C语言水仙花数的实现

    什么水仙花数? 水仙花数其实是自幂数的一种,自幂数是一个自然数中它每个个位上的数字n次方相加之和为它本身!,这里n可以称为立方指数! 而水仙花数的n次方的n是3,这里3可以称为自然数的立方指数 次方即为自身相乘多少次,一般用^表示,比如1的3次方表示为:1^3 比如153这个数是一个水仙花数,为什么呢? 下面我们用公式来看一下: 153有三个数位 1.5.3 1的三次方为1: 1*1*1=1 列: 1*1=1 1*1=1 5的三次方为125: 5*5*5=125 列: 5*5=25 25*5=1

  • C语言深入探究水仙花数与变种水仙花数代码

    目录 1.水仙花 1.1先看代码 1.2大体逻辑 2.变种水仙花数 2.1先看代码 2.2代码剖析 1.水仙花 题目: 1.1先看代码 #include <stdio.h> int main() { int i = 0; int count = 0; for (i = 100; i<= 999; i++) { int a = i / 100; int b = (i % 100)/10; int c = (i % 100)%10; if (i == a * a * a + b * b *

  • Java和C语言分别实现水仙花数及拓展代码

    目录 前言 一.水仙花数 1.代码(Java) 2.运行结果(Java) 3.代码(C语言) 4.运行结果(C语言) 二.拓展 1.代码(Java) 2.运行结果(Java) 3.代码(C语言) 4.运行结果(C语言) 前言 求出0-999之间的所有"水仙花数"并输出.("水仙花数"是指一个三位数,其各位数字的立方和确好等于该数本身,如:153=1+5+3?,则153是一个"水仙花数".) 一.水仙花数 因为水仙花数是三位数,所以我们把范围定为1

  • C语言 简单粗暴的笨方法找水仙花数

    什么是水仙花数: 指一个n位数,其各位数字的n次方之和确好等于该数本身 例如:    1         1^1=1: 153      3^3+5^3+1^3=153; 问题:求0~100000之间的水仙花数,并打印出来 看题目,找突破口: 0~100000  我可以想到用循环来判断0~10000间的数字 由栗子可知:我们需要求数字是几位 要用到次方,则我们需要引用math函数库里的pow函数 求和,依旧要使用循环 那么开始写代码,走一步思考一步: #include <stdio.h> #i

  • C语言趣味编程之水仙花数

    目录 题目描述 分析 代码实现 运行结果 题目描述 求出所有的水仙花数 分析 百度百科:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身.例如:13 + 53+ 33 = 153. 判断一个数是否为水仙花数,可以先将该数的所有位都取出并存入数组,最后代

  • C语言经典算法例题求100-999之间的“水仙花数”

    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方. 实现代码如下 #include <iostream> #include <Cmath> using namespace std; /* 求100-999之间的水仙花数 */ int main() { int number,hun,ten

  • java计算自然数中的水仙花数的方法分享

    核心代码 /** * m-n自然数中的水仙花数 * @param n * @param m */ static void getNums(int n,int m){ for(int i=m;i<=n;i++){ int ge,shi,bai; double shui; bai=i/100; shi=i%100/10; ge=i%10; shui=Math.pow(bai, 3)+Math.pow(shi, 3)+Math.pow(ge, 3); if(i==shui) System.out.pr

  • php实现水仙花数示例分享

    自幂数,又称阿姆斯特朗数,民间通称水仙花数.实则只有3位自幂数才是水仙花数.4位5位6位等等各有别的叫法. 复制代码 代码如下: <?php//阿姆斯特朗数:一个k位数,它的每个位上的数字的k次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153)class Armstrong { static function index(){  for ( $i = 100; $i < 100000; $i++ ) {   echo self::is_armstrong($i) ? $i

  • PHP求小于1000的所有水仙花数的代码

    水仙花数是一个n(>=3)位数字的数, 它等于每个数字的n次幂之和. 例如, 153是一个水仙花数, 153=1³+5³+3³. 编写程序, 求解小于1000的所有水仙花数. 复制代码 代码如下: <?php for($i=100;$i<1000;$i++){ $a=intval($i/100); $b=intval($i/10)%10; $c=$i%10; if(pow($a,3)+pow($b,3)+pow($c,3)==$i){ echo $i."\t"; }

随机推荐