• 求出0~999之间的所有“水仙花数”并输出


    “水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。

    /*
    在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。
    例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
    153 = 1^3 + 5^3 + 3^3。
    370 = 3^3 + 7^3 + 0^3。
    371 = 3^3 + 7^3 + 1^3。
    407 = 4^3 + 0^3 + 7^3。
    */

    思路:同理可以用提取整数每一位的方法来实现,将每一位的数字先立方然后在求和,同原来的数字比较大小,如果和原来是一样的值则输出,不一样则继续循环。

    方法一:

     1 #include<stdio.h>
     2 int main()
     3 {
     4         int a, b, c;
     5     int count = 0;
     6     for (int i = 100;i < 1000;i++)
     7     {
     8         a = i % 10;//提取整数的个位数字
     9         b = (i / 10) % 10;//提取整数的十位数字
    10         c = (i / 100) % 10;//提取整数的百位数字
    11         //判断是否为水仙花数字
    12         if (i == a * a*a + b * b*b + c * c*c)
    13         {
    14             count++;//个数
    15             printf("%d
    ", i);
    16         }
    17     }
    18     printf("count=%d", count);
    19 
    20         return 0;   
    21 }    

    方法二:

    第二种方法要注意一点,因为代码中有temp=temp/10;将原来的i值改变了,不能用与if语句的判断,所以应该在用一个临时变量来将i的值保存,方便之后的比较。

     1 #include<stdio.h>
     2 int main()
     3 {    
     4     int i;
     5     for (i = 100;i < 1000;i++)
     6     {
     7         int sum = 0;
     8         int temp = i;
     9                 //下面if语句要与原来的i进行比较,如果不保存i 的值会使得后面的i发生变化
    10         while (temp)
    11         {
    12             int num = temp % 10;//取个位的数字
    13             sum = sum + num * num * num;//求立方和
    14             temp = temp / 10;//将三位数变为两位数
    15         }
    16         if (sum == i)//判断是否为水仙花数
    17         {
    18             printf("%d
    ", i);
    19         }
    20     }
    21     return 0;
    22      
    23 }       
  • 相关阅读:
    理解HashSet及使用
    Java 集合类详解
    Java-泛型编程-使用通配符? extends 和 ? super
    回调函数及其用法
    log4j.properties 详解与配置步骤
    约瑟夫环
    泛型的约束与局限性
    把代码字体加大的办法
    System.arraycopy方法
    泛型数组列表与反射
  • 原文地址:https://www.cnblogs.com/cuckoo-/p/10295245.html
Copyright © 2020-2023  润新知