習題5-6 使用函數(shù)輸出水仙花數(shù) (20 分)
1. 題目摘自
https://pintia.cn/problem-sets/12/problems/306
2. 題目內(nèi)容
水仙花數(shù)是指一個 N
位正整數(shù) (N≥3)
,它的每個位上的數(shù)字的 N
次冪之和等于它本身计贰。例如:
17.png
?? 本題要求編寫兩個函數(shù),一個判斷給定整數(shù)是否水仙花數(shù),另一個按從小到大的順序打印出給定區(qū)間 (m,n)
內(nèi)所有的水仙花數(shù)露乏。
函數(shù)接口定義:
int narcissistic( int number );
void PrintN( int m, int n );
函數(shù) narcissistic
判斷 number
是否為水仙花數(shù)衍菱,是則返回 1
枢舶,否則返回 0
懦胞。
函數(shù) PrintN
則打印開區(qū)間 (m, n)
內(nèi)所有的水仙花數(shù),每個數(shù)字占一行凉泄。題目保證 100≤m≤n≤10000
躏尉。
輸入樣例:
153 400
輸出樣例:
153 is a narcissistic number
370
371
3. 源碼參考
#include<iostream>
#include<math.h>
using namespace std;
int narcissistic(int number);
void PrintN(int m, int n);
int main()
{
int m, n;
cin >> m >> n;
if (narcissistic(m))
{
cout << m << " is a narcissistic number" << endl;
}
PrintN(m, n);
if (narcissistic(n))
{
cout << n << " is a narcissistic number" << endl;
}
return 0;
}
int narcissistic(int number)
{
int m, n, s;
m = number;
n = 0;
while (m)
{
n++;
m /= 10;
}
m = number;
s = 0;
while (m)
{
s += pow(m % 10, n);
m /= 10;
}
if (s == number)
{
return 1;
}
else
{
return 0;
}
}
void PrintN(int m, int n)
{
for (int i = m + 1; i < n; i++)
{
if (narcissistic(i))
{
cout << i << endl;
}
}
return;
}