题目:求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
分三个函数来完成找出水仙花数的功能.
1、输入一个数能求出该数字是几位数
2、写出n的m次幂的函数
3、利用前面两个函数,把输入进来的形参的个位数、十位数、百位数等等分离出来并进行n次幂(n为形参数字的位数)
下面是代码部分
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Num.h"
int main()
{
//找到0~100000中的水仙花数
for (int i = 0;i <= 100000;i++)
{
isnum(i);
}
}
Num.h
#pragma once
#include <stdio.h>
//求出一个数位数的函数
int num1(int a);
//用来求次方的函数
int num2(int a,int n);
//求水仙花数的函数
void isnum(int a);
Num.c
#include "Num.h"
//求出一个数位数的函数//1 0 0 0 0 0
int num1(int a)
{
if (a / 100000 != 0)
{
return 6;
}
else if (a / 10000 != 0)
{
return 5;
}
else if (a / 1000 != 0)
{
return 4;
}
else if (a / 100 != 0)
{
return 3;
}
else if (a / 10 != 0)
{
return 2;
}
else
{
return 1;
}
}
//用来求次方的函数
int num2(int a, int n)//a是底数,n是指数
{
int tmp;
tmp = a;
for (int i = 0;i < n - 1;i++)
{
tmp = a*tmp;
}
return tmp;
}
void isnum(int a)
{
int n = num1(a);//n为数字a的位数
int tmp1 = 0;
int tmp2 = a;
for (int i = 0;i < n;i++)
{
tmp1 = num2(a%10,n)+tmp1;//个位数
a = a / 10;
}
if (tmp1 == tmp2)
{
printf("%d\n", tmp2);
}
}
|