2020/03/23 公開
・10のN乗かを判定
与えられた整数値Xが、10N(10のN乗)かを判定する方法を解説します。Nは0以上の整数とします。
10のN乗は、N=0から1ずつ増やしていくと以下のようになります。
100=0
101=10
102=100
103=1000
:
したがって、整数値Xが1、10、100、1000、10000、…のいずれかの値であれば、X=10Nです。
これは、整数値Xを10で割っていき、整数値Xが1になったときの割り算の回数でNが求められます。この計算の途中で、整数値Xの1の位(くらい)の値が0以外の場合には処理を中断します。また、整数値Xが0になった場合も処理を中断します。
以下は、上記の判定を行うJavaのソースコードです。整数値はキーボードで入力します。
IsPowerofTen1.java ← クリックしてダウンロードページに移動001: import java.util.Scanner; 002: 003: public class IsPowerofTen1 { 004: // numが10のN乗かを調べる 005: // 戻り値はNの値、-1の場合は10のN乗の値ではない 006: static int isPowerofTen( int num ) 007: { 008: // 1未満の場合、10のN乗ではない 009: if ( 1 > num ) return -1; 010: 011: // Nを求める処理 012: for ( int n = 0; ; n++ ) { 013: // numが1になったときのnがN 014: if ( 1 == num ) return n; 015: 016: // numが0になったときに処理を中断 017: if ( 0 == num ) break; 018: 019: // 1の位が0でなければ処理を中断 020: if ( 0 != ( num % 10 ) ) break; 021: 022: // numを10で割っていく 023: num = num / 10; 024: } 025: 026: return -1; 027: } 028: 029: 030: // メイン 031: public static void main( String[] args ) { 032: // 整数の値をキーボードから入力 033: Scanner scanner = new Scanner( System.in ); 034: System.out.print( "整数の値を入力してください: " ); 035: String str = scanner.next(); 036: 037: // 文字列を整数の値に変換 038: int num = Integer.parseInt( str ); 039: 040: // 10のN乗かを調べる 041: int n = isPowerofTen( num ); 042: if ( 0 <= n ) 043: System.out.println( num + "は10の" + n + "乗" ); 044: else 045: System.out.println( num + "は10のN乗ではありません!" ); 046: } 047: }
IsPowerofTen1実行
C:\talavax\javasample>java IsPowerofTen1
キーボードで整数値を入力して、各位(くらい)の値を求めます。
IsPowerofTen1.javaの出力結果1
整数の値を入力してください: 1000 1000は10の3乗
IsPowerofTen1.javaの出力結果2
整数の値を入力してください: 2000 2000は10のN乗ではありません!
ここからは、このソースコードを上から順番に解説していきます。
001: import java.util.Scanner;
Javaのクラスライブラリの中から「java.util.Scanner」というパッケージにあるクラスを使うために記述しています。
003: public class IsPowerofTen1 {
クラス名を、IsPowerofTen1としています。
004: // numが10のN乗かを調べる 005: // 戻り値はNの値、-1の場合は10のN乗の値ではない 006: static int isPowerofTen( int num ) 007: {
指定した整数numが10のN乗かを判定するメソッドisPowerofTenです。numの値が10のN乗の場合、このメソッドは0以上の値を戻します。numが10のN乗でない場合、-1を戻します。
008: // 1未満の場合、10のN乗ではない 009: if ( 1 > num ) return -1;
変数numの値が1未満の場合にreturn文で-1を戻しています。
011: // Nを求める処理 012: for ( int n = 0; ; n++ ) { 013: // numが1になったときのnがN 014: if ( 1 == num ) return n; 015: 016: // numが0になったときに処理を中断 017: if ( 0 == num ) break; 018: 019: // 1の位が0でなければ処理を中断 020: if ( 0 != ( num % 10 ) ) break; 021: 022: // numを10で割っていく 023: num = num / 10; 024: }
Nを求めるプログラムの本体です。変数numの値を10で割っていき、その値が1、0、1の位が0以外かを判定しています。変数numの値が1の場合、return文で割り算を行った回数nを戻してします。
026: return -1;
変数numを10で割っていき、その値が1にならなかった場合、return文で-1を戻しています。
030: // メイン 031: public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
032: // 整数の値をキーボードから入力 033: Scanner scanner = new Scanner( System.in );
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
034: System.out.print( "整数の値を入力してください: " );
printメソッドで、"整数の値を入力してください:" をコンソール出力しています。printメソッドを使っているので、コンソール入力した文字はメッセージの右側に表示されます。printlnメソッドを使った場合、コンソール入力した文字はメッセージの下の行に表示されます。
035: String str = scanner.next();
nextメソッドで、キーボードから入力された1行を読み取り、String型のstrに代入しています。
ここで、入力待ち状態になり、Enterキーが押されるまでの入力文字がlineに格納されます。キーボードの"Ctrl"キーを押しながら"C"を押すと強制終了します。
037: // 文字列を整数の値に変換 038: int num = Integer.parseInt( str );
IntegerクラスのparseIntメソッドで、文字列strを整数numに変換しています。
040: // 10のN乗かを調べる 041: int n = isPowerofTen( num );
isPowerofTenメソッドにnumを渡して、Nの値を求め変数nに代入しています。
042: if ( 0 <= n ) 043: System.out.println( num + "は10の" + n + "乗" ); 044: else 045: System.out.println( num + "は10のN乗ではありません!" );
結果をコンソール出力しています。
ソースコードの説明は以上です。
次に、上記とは違う方法で10のN乗の判定を行うJavaのソースコードを紹介します。
IsPowerofTen2.java ← クリックしてダウンロードページに移動001: import java.util.Scanner; 002: 003: public class IsPowerofTen2 { 004: // numが10のN乗かを調べる 005: // 戻り値はNの値、-1の場合は10のN乗の値ではない 006: static int isPowerofTen( int num ) 007: { 008: // 1未満の場合、10のN乗ではない 009: if ( 1 > num ) return -1; 010: 011: // 単純な方法で調べる 012: if ( 1 == num ) return 0; 013: if ( 10 == num ) return 1; 014: if ( 100 == num ) return 2; 015: if ( 1000 == num ) return 3; 016: if ( 10000 == num ) return 4; 017: if ( 100000 == num ) return 5; 018: if ( 1000000 == num ) return 6; 019: if ( 10000000 == num ) return 7; 020: if ( 100000000 == num ) return 8; 021: if ( 1000000000 == num ) return 9; 022: 023: return -1; 024: } 025: 026: 027: // メイン 028: public static void main( String[] args ) { 029: // 整数の値をキーボードから入力 030: Scanner scanner = new Scanner( System.in ); 031: System.out.print( "整数の値を入力してください: " ); 032: String str = scanner.next(); 033: 034: // 文字列を整数の値に変換 035: int num = Integer.parseInt( str ); 036: 037: // 10のN乗かを調べる 038: int n = isPowerofTen( num ); 039: if ( 0 <= n ) 040: System.out.println( num + "は10の" + n + "乗" ); 041: else 042: System.out.println( num + "は10のN乗ではありません!" ); 043: } 044: }
004: // numが10のN乗かを調べる 005: // 戻り値はNの値、-1の場合は10のN乗の値ではない 006: static int isPowerofTen( int num ) 007: { 008: // 1未満の場合、10のN乗ではない 009: if ( 1 > num ) return -1; 010: 011: // 単純な方法で調べる 012: if ( 1 == num ) return 0; 013: if ( 10 == num ) return 1; 014: if ( 100 == num ) return 2; 015: if ( 1000 == num ) return 3; 016: if ( 10000 == num ) return 4; 017: if ( 100000 == num ) return 5; 018: if ( 1000000 == num ) return 6; 019: if ( 10000000 == num ) return 7; 020: if ( 100000000 == num ) return 8; 021: if ( 1000000000 == num ) return 9; 022: 023: return -1; 024: }
指定した整数numが10のN乗かを判定するメソッドisPowerofTenです。for文での繰り返し処理を行わず、if文でnumのと10のN乗の値が等しいかを判定しています。
int型の範囲は、-2147483648(-215) ~ 2147483647(215-1)です。この値の範囲の中の10のN乗の値の全てをif文で判定しています。
以上です。
■関連コンテンツ
各位(くらい)を求める | 1の位の値は?10の位は? |
指定した位の値を求める | 指定した位の値は? |
return文 | メソッドの戻り値 |
break文 | ループから処理から抜け出る |
キーボード入力 | ScannerクラスとSystem.inを使用 |
値のコンソール表示 | print()、println()とは? |
Javaの変数 | Javaで扱う変数について解説 |
剰余(余り)計算剰余(余り)をを計算するプログラムの紹介と、その結果を表示する方法を解説 |
|
for文繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。 |
|
if文条件による処理の分岐に使用するif文について解説 |
|
計算結果の表示足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告