【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)を小さい順に印刷する.内のすべての水仙の花の数.
関数インタフェースの定義:
関数narcissisticはnumberが水仙数であるかどうかを判断し、はいは1を返し、そうでなければ0を返します.
関数PrintNは、開区間(m,n)内のすべての水仙の数を印刷し、数字ごとに1行を占めます.タイトル保証100≦m≦n≦10000.
審判試験プログラムのサンプル:
サンプルを入力:
153 400
出力サンプル:
153 is a narcissistic number 370 371
構想
入力したデータは3~5ビットである可能性があり、まず入力データのビット数を判断すべきである.次に、式が満たされているかどうかを判断します.
コード#コード#
水仙の花の数は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);
}
}
}