10のN乗かを判定
はじめに
10のN乗は、N=0から1ずつ増やしていくと以下のようになります。
100=0
101=10
102=100
103=1000
104=10000
105=100000
したがって、整数値Xが1、10、100、1000、10000、…のいずれかの値であれば、X=10Nです。
これは、整数値Xを10で割っていき、整数値Xが1になったときの割り算の回数でNが求められます。この計算の途中で、整数値Xの1の位(くらい)の値が0以外の場合には処理を中断します。また、整数値Xが0になった場合も処理を中断します。
Javaソースコード - for文を使う方法
IsPowerofTen1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047
import java.util.Scanner; public class IsPowerofTen1 { // numが10のN乗かを調べる // 戻り値はNの値、-1の場合は10のN乗の値ではない static int isPowerofTen( int num ) { // 1未満の場合、10のN乗ではない if ( 1 > num ) return -1; // Nを求める処理 for ( int n = 0; ; n++ ) { // numが1になったときのnがN if ( 1 == num ) return n; // numが0になったときに処理を中断 if ( 0 == num ) break; // 1の位が0でなければ処理を中断 if ( 0 != ( num % 10 ) ) break; // numを10で割っていく num = num / 10; } return -1; } // メイン public static void main( String[] args ) { // 整数の値をキーボードから入力 Scanner scanner = new Scanner( System.in ); System.out.print( "整数の値を入力してください: " ); String str = scanner.next(); // 文字列を整数の値に変換 int num = Integer.parseInt( str ); // 10のN乗かを調べる int n = isPowerofTen( num ); if ( 0 <= n ) System.out.println( num + "は10の" + n + "乗" ); else System.out.println( num + "は10のN乗ではありません!" ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis IsPowerofTen1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac IsPowerofTen1.java
実行
C:\talavax\javasample>java IsPowerofTen1
実行例1
整数の値を入力してください: 1000 1000は10の3乗
実行例2
整数の値を入力してください: 2000 2000は10のN乗ではありません!
キーボードで整数値を入力して、各位(くらい)の値を求めます。
ここからは、このソースコードを上から順番に解説していきます。
001
import java.util.Scanner;
003
public class IsPowerofTen1 {
クラス名を、IsPowerofTen1としています。
004 005 006 007
// numが10のN乗かを調べる // 戻り値はNの値、-1の場合は10のN乗の値ではない static int isPowerofTen( int num ) {
008 009
// 1未満の場合、10のN乗ではない
if ( 1 > num ) return -1;
011 012 013 014 015 016 017 018 019 020 021 022 023 024
// Nを求める処理 for ( int n = 0; ; n++ ) { // numが1になったときのnがN if ( 1 == num ) return n; // numが0になったときに処理を中断 if ( 0 == num ) break; // 1の位が0でなければ処理を中断 if ( 0 != ( num % 10 ) ) break; // numを10で割っていく num = num / 10; }
026
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();
ここで、入力待ち状態になり、Enterキーが押されるまでの入力文字がlineに格納されます。キーボードの"Ctrl"キーを押しながら"C"を押すと強制終了します。
037 038
// 文字列を整数の値に変換 int num = Integer.parseInt( str );
IntegerクラスのparseIntメソッドで、文字列strを整数numに変換しています。
040 041
// 10のN乗かを調べる int n = isPowerofTen( num );
042 043 044 045
if ( 0 <= n ) System.out.println( num + "は10の" + n + "乗" ); else System.out.println( num + "は10のN乗ではありません!" );
結果をコンソール出力しています。
ソースコードの説明は以上です。
Javaソースコード - 単純な方法
IsPowerofTen2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044
import java.util.Scanner; public class IsPowerofTen2 { // numが10のN乗かを調べる // 戻り値はNの値、-1の場合は10のN乗の値ではない static int isPowerofTen( int num ) { // 1未満の場合、10のN乗ではない if ( 1 > num ) return -1; // 単純な方法で調べる if ( 1 == num ) return 0; if ( 10 == num ) return 1; if ( 100 == num ) return 2; if ( 1000 == num ) return 3; if ( 10000 == num ) return 4; if ( 100000 == num ) return 5; if ( 1000000 == num ) return 6; if ( 10000000 == num ) return 7; if ( 100000000 == num ) return 8; if ( 1000000000 == num ) return 9; return -1; } // メイン public static void main( String[] args ) { // 整数の値をキーボードから入力 Scanner scanner = new Scanner( System.in ); System.out.print( "整数の値を入力してください: " ); String str = scanner.next(); // 文字列を整数の値に変換 int num = Integer.parseInt( str ); // 10のN乗かを調べる int n = isPowerofTen( num ); if ( 0 <= n ) System.out.println( num + "は10の" + n + "乗" ); else System.out.println( num + "は10のN乗ではありません!" ); } }
実行
C:\talavax\javasample>java IsPowerofTen2
004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024
// numが10のN乗かを調べる // 戻り値はNの値、-1の場合は10のN乗の値ではない static int isPowerofTen( int num ) { // 1未満の場合、10のN乗ではない if ( 1 > num ) return -1; // 単純な方法で調べる if ( 1 == num ) return 0; if ( 10 == num ) return 1; if ( 100 == num ) return 2; if ( 1000 == num ) return 3; if ( 10000 == num ) return 4; if ( 100000 == num ) return 5; if ( 1000000 == num ) return 6; if ( 10000000 == num ) return 7; if ( 100000000 == num ) return 8; if ( 1000000000 == num ) return 9; return -1; }
以上です。