10のN乗かを判定

はじめに

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

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

10=0
10=10
10=100
10=1000
10=10000
10=100000

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

これは、整数値Xを10で割っていき、整数値Xが1になったときの割り算の回数でNが求められます。この計算の途中で、整数値Xの1の位(くらい)の値が0以外の場合には処理を中断します。また、整数値Xが0になった場合も処理を中断します。

Javaソースコード - for文を使う方法

以下は、上記の判定を行うJavaソースコードです。整数値はキーボードで入力します。

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;

Javaクラスライブラリの中から「java.util.Scanner」というパッケージにあるクラスを使うために記述しています。

003
public class IsPowerofTen1 {

クラス名を、IsPowerofTen1としています。

004
005
006
007
	// numが10のN乗かを調べる
	// 戻り値はNの値、-1の場合は10のN乗の値ではない
	static int isPowerofTen( int num )
	{

指定した整数numが10のN乗かを判定するメソッドisPowerofTenです。numの値が10のN乗の場合、このメソッドは0以上の値を戻します。numが10のN乗でない場合、-1を戻します。

008
009
		// 1未満の場合、10のN乗ではない
		if ( 1 > num ) return -1;

変数numの値が1未満の場合に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;
		}

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
041
		// 10のN乗かを調べる
		int n = isPowerofTen( num );

isPowerofTenメソッドにnumを渡して、Nの値を求め変数nに代入しています。

042
043
044
045
		if ( 0 <= n )
			System.out.println( num + "は10の" + n + "乗" );
		else
			System.out.println( num + "は10のN乗ではありません!" );

結果をコンソール出力しています。

ソースコードの説明は以上です。

Javaソースコード - 単純な方法

次に、上記とは違う方法で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;
	}

指定した整数numが10のN乗かを判定するメソッドisPowerofTenです。for文での繰り返し処理を行わず、if文でnumのと10のN乗の値が等しいかを判定しています。

int型の範囲は、-2147483648(-215) ~ 2147483647(215-1)です。この値の範囲の中の10のN乗の値の全てをif文で判定しています。

以上です。

関連コンテンツ

整数値の指定した位を求める方法を詳しく解説しています。

2020.03.23

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

繰り返し処理(ループ)から強制的に抜けかたについて解説しています。

2017.07.14

キーボードを使って値を入力する方法を解説しています。ソースコード付きです。

2020.08.19

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラミングで使う変数って何?

2020.03.23

割り算で割り切れずに残った端数を剰余(余り)といいます。この剰余の計算をJavaのソースコードを使って解説しています。

2020.03.23

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

条件式を判断して処理を分岐する方法を詳しく説明しています。

2023.03.20

基本的な計算である足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)を行うプログラム作成。

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

Javaのプログラムを作ってみませんか?プログラミングに必要なものの用意から実行までを説明しています。

2020.03.23

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

プログラミング、ITに関する用語をまとめています。

2022.10.17

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

自然数と整数って何が違う?

2020.03.23

Javaの演算子'/'を使って割り算を行った結果と注意点などについて説明。

2020.03.23

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

for文で変数名iがよく使われる理由について説明しています。興味のある方は是非。

2022.08.29

キーボードから文字列を入力する方法を詳しく説明しています。

2015.11.03

Integerクラスについて、ソースコードを使って詳しく説明しています。

2020.03.23

繰り返し処理の作り方を解説しています。

2016.03.02

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

広告