1 題目重述
輸入一個整數 n,請計算并傳回該整數「各位數字之積」與「各位數字之和」的差
例如:
輸入:567
傳回:192
解釋:
- 各位數字之積:5×6×7=210
- 各位數字之和:5+6+7=18
- 差: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