Javaプログラミング学習サイト ゆるゆるプログラミング

2021/05/31 公開

・10のN乗かを判定

与えられた整数値Xが、10(10のN乗)かを判定する方法を解説します。Nは0以上の整数とします。

10のN乗は、N=0から1ずつ増やしていくと以下のようになります。

10=0

10=10

10=100

10=1000

  :

したがって、整数値Xが1、10、100、1000、10000、…のいずれかの値であれば、X=10です。

これは、整数値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文

繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。

条件による処理の分岐に使用するif文について解説-画像

if文

条件による処理の分岐に使用するif文について解説

四則演算(足し算/引き算/掛け算/割り算)について-画像

計算結果の表示

足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

■広告

 

 

 

 

 

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2021/6/18 14:32時点)
感想(6件)

 

 

 

 

Topへ