【PTA】練習問題5-6関数を用いて水仙数(c)を出力する

10001 ワード

タイトルの説明
水仙の花の数は1つのN位の正の整数を指します(N≧3)は、その各ビットの数字のN乗の和がそれ自体に等しい.例えば、153=1 3+5 3+3 153=1^3+5^3+3 153=13+53+33である.本題では、与えられた整数が水仙の花の数であるか否かを判断する2つの関数を作成し、もう1つは、与えられた区間(m,n)を小さい順に印刷する.内のすべての水仙の花の数.
関数インタフェースの定義:
int narcissistic( int number );
void PrintN( int m, int n );

関数narcissisticはnumberが水仙数であるかどうかを判断し、はいは1を返し、そうでなければ0を返します.
関数PrintNは、開区間(m,n)内のすべての水仙の数を印刷し、数字ごとに1行を占めます.タイトル保証100≦m≦n≦10000.
審判試験プログラムのサンプル:
#include 

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
    int m, n;
    
    scanf("%d %d", &m, &n);
    if ( narcissistic(m) ) printf("%d is a narcissistic number
"
, m); PrintN(m, n); if ( narcissistic(n) ) printf("%d is a narcissistic number
"
, n); return 0; } /* */

サンプルを入力:
153 400
出力サンプル:
153 is a narcissistic number 370 371
構想
入力したデータは3~5ビットである可能性があり、まず入力データのビット数を判断すべきである.次に、式が満たされているかどうかを判断します.
コード#コード#
int pow(int n,int p){
    int a=n;
    while(--p){
        n=n*a;
    }
    return n;
}
//  number       ,    1,    0
int narcissistic( int number ){
    int i;//      
    int a[5]={-1};//    
    int num=number;
    int dig=0;
    for(i=0;number>0;i++){
        a[i]=number%10;
        number=number/10;
    }
    for(int j=0;j<i;j++){
        if(a[j]!=-1){
            dig=dig+pow(a[j],i);
        }
    }
    if(num==dig){
        return 1;
    }
    return 0;
}
//     (m, n)        ,       
void PrintN( int m, int n ){
    for(int i=m+1;i<n;i++){
        if(narcissistic(i)){
            printf("%d
"
,i); } } }