天天看點

【Java每日程式設計小練習 2021-01-17】輸入一個整數 n,請計算并傳回該整數「各位數字之積」與「各位數字之和」的差1 題目重述2 題目分析3 代碼實作

1 題目重述

輸入一個整數 n,請計算并傳回該整數「各位數字之積」與「各位數字之和」的差

例如:

輸入:567

傳回:192

解釋:

  1. 各位數字之積:5×6×7=210
  2. 各位數字之和:5+6+7=18
  3. 差:210-18=192

2 題目分析

2.1 題目梳理

拿到題目,我們要對題目進行分析,找到題目中所蘊含的關鍵資訊

本題中的關鍵字:輸入、整數n、各位數字、積、和、差

由此,我們要做的第一件事就是擷取鍵盤上的輸入,且輸入必須為一個整數。其次,擷取該整數的各位數字。進而求得各位數字之積和各位數字之和。最後,進行做差運算。

2.2 實作思路

1.鍵盤輸入一個整數。

建立Scanner類的對象input,并傳入參數System.in 代表系統輸入流。使用Scanner類的nestInt()方法擷取整型數字n。

2.擷取各位數字

思路1:

首先,我們從數學中 被除數➗除數=商+餘數 這一點可以知道,當除數為10時,隻會對數字進行小數點的前移而不改變每一位數字的值。

其次,通過整數對10取餘,可以得到該整數的個位數字。通過整數除以10取商,可以該整數的大小,對整數進行降位操作(即将n位整數變為n-1位整數,且不改變該整數每一位數字)。反複多次,直到該整數等于0,這樣就提取出了該整數的每一位數字。

這裡要用到的文法:循環結構(這裡采用的是while循環 )

思路2:

我們知道整型是基本資料類型,沒有調用方法,也無法直接擷取每一位數字。但是字元串類型是引用資料類型,可以調用charAt()方法提取字元串中的每一個元素。基于此,我們思考是否可以将整型轉換成字元串類型。幸運的是,String類型為我們提供了這樣一個方法,采用String類的valueOf()方法可以将其他資料類型轉換成字元串類型。于是我們采用String.valueOf()方法将整型轉換成字元串類型,進而采用String類的charAt()方法提取出字元串中的每一個數字字元。

可是我們也知道字元雖然有對應的是ASCII碼,但無法進行計算,也就無法實作我們的需要。于是我們還需要将每一個字元轉換為整型,進而進行數字之間的計算。

這一過程被拆分為兩個部分,第一部分是将字元轉換成字元串類型,那麼首先要将擷取的字元轉換為字元串,依舊采用String類的valueOf()方法可以将字元類型轉換成字元串類型。第二部分是将字元串類型轉換成整型,我們知道Integer是int的包裝類型,可以調用方法,采用Integer類的parseInt()方法,可以将字元串類型轉換為整型,進而實作字元型到整型的轉換。

3.進行做差運算

對我們得到的數字分别進行累加和累積,并将結果分别儲存在sum和mul中。

3 代碼實作

3.1 方式一:

通過對10取餘的方式擷取每一位數字

// 1 擷取一個整數n
		Scanner input = new Scanner(System.in);// System.in 代表系統輸入流
		System.out.println("請輸入一個整數:");
		int n = input.nextInt();//nextInt()方法限制輸入必須為整型
		System.out.println("輸入數字為:" + n);

		// 2 擷取該整數的每一位數字
		// 2.1 預設和為0,積為1(積為0的話就沒有辦法累積了哦,畢竟0乘任何數都為0)
		int sum = 0, mul = 1;
		// 2.2 判斷數字是否為0
		while (n != 0) {
			// 2.3 擷取整數的各位數字
			int num = n % 10;
			// 2.4 累積
			mul *= num;
			// 2.5 累加
			sum += num;
			// 2.6 對整數進行降位(即改變目前數字的大小)
			n /= 10;
		}
		// 3 進行做差計算
		int result = mul - sum;

		// 4 輸出
		System.out.println("運算結果為:" + result);
           

代碼結果:

請輸入一個整數:
567
輸入數字為:567
運算結果為:192
           

3.2 方式二:

通過類型轉換擷取每一位數字

// 1 擷取一個整數n
		Scanner input = new Scanner(System.in);// System.in 代表系統輸入流
		System.out.println("請輸入一個整數:");
		int n = input.nextInt();
		System.out.println("輸入數字為:" + n);

		// 2 擷取該整數的每一位數字
		// 2.1 預設和為0,積為1
		int sum = 0, mul = 1;
		// 2.2 将數字轉化為字元串,使用String類的.charAt()方法提取字元串中的每個元素
		// 整型=>字元串
		String strNumber = String.valueOf(n);
		for (int i = 0; i < strNumber.length(); i++) {
			char c = strNumber.charAt(i);
			// 2.3 将字元轉化為字元串,再将字元串轉化為整型,進行運算
			// 字元=>字元串=>整型
			// 分步實作
//			String str = String.valueOf(c);
//			int num = Integer.parseInt(str);
			// 組合實作
			int num = Integer.parseInt(String.valueOf(c));
			// 2.4 累積
			mul *= num;
			// 2.5 累加
			sum += num;
		}
		// 3 進行做差計算
		int result = mul - sum;
		// 4 輸出
		System.out.println("運算結果為:" + result);
           

代碼結果:

請輸入一個整數:
567
輸入數字為:567
運算結果為:192
           

3.3 方式三:

如果你的程式中需要多次計算,可以将實作的代碼寫作方法,在主函數中調用即可。

public static void main(String[] args) {
		// 1.擷取輸入數字
		Scanner input = new Scanner(System.in);
		System.out.println("請輸入數字:");
		int n = input.nextInt();
		System.out.println("輸入數字為:"+n);
		// 2.調用方法并輸出
		// 方法1:
		System.out.println("計算結果1:" + diff1(n));
		// 方法2:
		System.out.println("計算結果2:" + diff2(n));
	}

	// 方法1:
	public static int diff1(int n) {
		// 1.預設和等于0,積等于1
		int sum = 0, result = 1;
		// 2.判斷數字是否為0
		while (n != 0) {
			// 3.擷取目前數字的個位
			int num = n % 10;
			// 4.進行計算
			// 4.1累加
			sum += num;
			// 4.2累乘
			result *= num;
			// 5.改變目前數字的大小
			n = n / 10;
		}
		return result - sum;
	}

	// 方法2:
	public static int diff2(int n) {
		// 1.預設和等于0,積等于1
		int sum = 0, result = 1;
		// 2.将整型轉化為字元串類型
		String strNumber = String.valueOf(n);
		// 3.擷取字元串的每個字元
		for (int i = 0; i < strNumber.length(); i++) {
			char c = strNumber.charAt(i);
			// 4.類型轉換
			// 字元=>字元串=>整型
			String s = String.valueOf(c);
			int num = Integer.parseInt(s);
			// 5.進行計算
			sum += num;
			result *= num;
		}
		return result - sum;
	}
           

代碼結果:

請輸入數字:
567
輸入數字為:567
計算結果1:192
計算結果2:192