您的位置:首页 > 编程语言 > PHP开发

水仙花数

2010-10-12 14:24 155 查看
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息