水仙花数
2010-10-12 14:24
155 查看
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
C源代码:
结果:
C源代码:
/* * File name: narcissistic_number.c * Author: Shang * Version: 1.0 * Date: 2010/10/12 * * Description: get the narcissistic numbers such as 153 = 1^3 + 5^3 + 3^3, * 370 = 3^3 + 7^3 + 0^3, ... * Function list: * 1. * History: * 1. Date: * Author: * Modification: * Others: * 1. compiled by gcc 3.4.6 under the platform of RHEL 5(2.6.18-128.el5): * $ gcc narcissistic_number.c -std=c99 -Wall -lm * $ ./a.out * 2. more refer to: * http://mathworld.wolfram.com/NarcissisticNumber.html */ #include <stdio.h> #include <math.h> #include <limits.h> #include <stdlib.h> /* get the digits of a number */ int getDigits(int n); /* get the sum of every digit^digits */ int getSum(int n, int digits); int main() { printf("The narcissistic numbers are:"); for(int i = 1, count = 0; i < LONG_MAX; i++) { int digits = getDigits(i); if(getSum(i, digits) == i) { if(count != digits) { printf("/n(%d-digits)/t", digits); count = digits; } printf("%d/t", i); /* help stdout redirect to a text file */ fflush(stdout); } } return 0; } /* * Function: getDigits * Description: get the digits of a number * Calls: abs * Called: main * * Input: * 1. int n * Output: none * Return: int digits * * Others: * 1. return 2 if n = (10 ~ 99), 3 if n = (100 ~ 999)... */ int getDigits(int n) { int digits = 0; if(n == 0) { return (digits + 1); } else { n = abs(n); } while(n != 0) { digits++; n = n / 10; } return digits; } /* * Function: getSum * Description: get the sum of every digit^digits * * Calls: pow * Called main * * Input: * 1. int n * 2. int digits(n's digits): 3 (if n = 153) * Output: none * Return: int sum(of every digit^digits) * * Others: * 1. return sum(if n == 153) = 3^3 + 5^3 + 1^3 */ int getSum(int n, int digits) { int reminder = 0, sum = 0; while(n != 0) { reminder = n % 10; sum = sum + (int) pow((double)reminder, (double)digits); n = n /10; } return sum; } /*******************Easy version of narcissistic_number.c*********************** #include <stdio.h> #include <math.h> #include <stdlib.h> #include <limits.h> int main() { printf("The narcissistic numbers are:/n"); for(int i = 1, count = 0; i < LONG_MAX; i++) { int digits = 0, sum = 0, temp = i, reminder = 0; while(temp != 0) { digits++; temp = temp / 10; } temp = i; while(temp != 0) { reminder = temp % 10; sum = sum + (int) pow((double)reminder, (double)digits); temp = temp / 10; } if(sum == i) { printf("%d/t", i); fflush(stdout); } } return 0; } ******************************************************************************/
结果:
The narcissistic numbers are: (1-digits) 1 2 3 4 5 6 7 8 9 (3-digits) 153 370 371 407 (4-digits) 1634 8208 9474 (5-digits) 54748 92727 93084 (6-digits) 548834 (7-digits) 1741725 4210818 9800817 9926315 (8-digits) 24678050 24678051
相关文章推荐
- 用for求出所有水仙花数
- “水仙花数”是否如“质数”一样无界?
- 数学趣题——寻找水仙花数
- 水仙花数的算法(怎样怎样将数字拆分为个位,十位,百位)
- 水仙花数问题
- 水仙花数(标记的使用)
- 水仙花数
- C语言打印水仙花数
- 找出水仙花数
- 水仙花数
- 输出1000以内的水仙花数
- 关于水仙花数
- Java打印出100-999之间所有的"水仙花数"
- 水仙花数
- java实现水仙花数
- Java水仙花数
- NYOJ 题目39 水仙花数
- 作业 4 函数应用输入2个正整数m和n(1≤m,n≤1000),输出m~n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。
- 求任意位数的水仙花数(阿姆斯特朗数)
- 第十八周回顾练习项目——水仙花数