Java每日編程小練習(xí) 2021-1-17

1 題目重述

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

例如:

輸入:567

返回:192

解釋:

? ? 1.各位數(shù)字之積:5×6×7=210

? ? 2.各位數(shù)字之和:5+6+7=18

? ? 3.差:210-18=192


2 題目分析

2.1 題目梳理

拿到題目蝇棉,我們要對題目進(jìn)行分析涣旨,找到題目中所蘊(yùn)含的關(guān)鍵信息

本題中的關(guān)鍵字:輸入、整數(shù)n峦剔、各位數(shù)字、積角钩、和、差

由此递礼,我們要做的第一件事就是獲取鍵盤上的輸入惨险,且輸入必須為一個整數(shù)。

其次脊髓,獲取該整數(shù)的各位數(shù)字。

進(jìn)而求得各位數(shù)字之積和各位數(shù)字之和将硝。

最后,進(jìn)行做差運(yùn)算依疼。


2.2 實(shí)現(xiàn)思路

1.鍵盤輸入一個整數(shù)創(chuàng)建Scanner類的對象input痰腮,并傳入?yún)?shù)System.in 代表系統(tǒng)輸入流。使用Scanner類的nestInt()方法獲取整型數(shù)字n涛贯。

2.獲取各位數(shù)字思路1:首先诽嘉,我們從數(shù)學(xué)中 被除數(shù)?除數(shù)=商+余數(shù) 這一點(diǎn)可以知道弟翘,當(dāng)除數(shù)為10時,只會對數(shù)字進(jìn)行小數(shù)點(diǎn)的前移而不改變每一位數(shù)字的值稀余。其次,通過整數(shù)對10取余睛琳,可以得到該整數(shù)的個位數(shù)字踏烙。通過整數(shù)除以10取商历等,可以該整數(shù)的大小讨惩,對整數(shù)進(jìn)行降位操作(即將n位整數(shù)變?yōu)閚-1位整數(shù)寒屯,且不改變該整數(shù)每一位數(shù)字)。反復(fù)多次寡夹,直到該整數(shù)等于0,這樣就提取出了該整數(shù)的每一位數(shù)字菩掏。這里要用到的語法:循環(huán)結(jié)構(gòu)(這里采用的是while循環(huán) )

思路2:我們知道整型是基本數(shù)據(jù)類型,沒有調(diào)用方法野揪,也無法直接獲取每一位數(shù)字。但是字符串類型是引用數(shù)據(jù)類型囱挑,可以調(diào)用charAt()方法提取字符串中的每一個元素沼溜。基于此系草,我們思考是否可以將整型轉(zhuǎn)換成字符串類型唆涝。幸運(yùn)的是,String類型為我們提供了這樣一個方法廊酣,采用String類的valueOf()方法可以將其他數(shù)據(jù)類型轉(zhuǎn)換成字符串類型能耻。于是我們采用String.valueOf()方法將整型轉(zhuǎn)換成字符串類型,從而采用String類的charAt()方法提取出字符串中的每一個數(shù)字字符亡驰∠停可是我們也知道字符雖然有對應(yīng)的是ASCII碼,但無法進(jìn)行計算凡辱,也就無法實(shí)現(xiàn)我們的需要戒职。于是我們還需要將每一個字符轉(zhuǎn)換為整型透乾,從而進(jìn)行數(shù)字之間的計算磕秤。這一過程被拆分為兩個部分,第一部分是將字符轉(zhuǎn)換成字符串類型市咆,那么首先要將獲取的字符轉(zhuǎn)換為字符串再来,依舊采用String類的valueOf()方法可以將字符類型轉(zhuǎn)換成字符串類型。第二部分是將字符串類型轉(zhuǎn)換成整型其弊,我們知道Integer是int的包裝類型,可以調(diào)用方法痹雅,采用Integer類的parseInt()方法,可以將字符串類型轉(zhuǎn)換為整型绩社,從而實(shí)現(xiàn)字符型到整型的轉(zhuǎn)換赂苗。

3.進(jìn)行做差運(yùn)算對我們得到的數(shù)字分別進(jìn)行累加和累積,并將結(jié)果分別保存在sum和mul中拌滋。


3 代碼實(shí)現(xiàn)

3.1 方式一:通過對10取余的方式獲取每一位數(shù)字

3.1.1 代碼如下:

//1獲取一個整數(shù)n

Scanner input=new Scanner(System.in);

// System.in 代表系統(tǒng)輸入流

System.out.println("請輸入一個整數(shù):");

int n=input.nextInt();

//nextInt()方法限制輸入必須為整型

System.out.println("輸入數(shù)字為:"+n);

//2獲取該整數(shù)的每一位數(shù)字

//2.1 默認(rèn)和為0,積為1(積為0的話就沒有辦法累積了哦赌渣,畢竟0乘任何數(shù)都為0)

int sum=0, mul=1;

//2.2 判斷數(shù)字是否為0

while(n !=0) {

? ? //2.3 獲取整數(shù)的各位數(shù)字

? ? int num=n %10;

? ? //2.4 累積

? ? mul *=num;

? ? //2.5 累加

? ? sum+=num;

? ? //2.6 對整數(shù)進(jìn)行降位(即改變當(dāng)前數(shù)字的大胁獭)

? ? n /=10;

}

//3進(jìn)行做差計算

int result=mul-sum;

//4輸出

System.out.println("運(yùn)算結(jié)果為:"+result);


3.1.2 代碼結(jié)果:

請輸入一個整數(shù):

567

輸入數(shù)字為:567

運(yùn)算結(jié)果為:192


3.2 方式二:通過類型轉(zhuǎn)換獲取每一位數(shù)字

3.2.1 代碼如下:

//1獲取一個整數(shù)n

Scanner input=new Scanner(System.in);

// System.in 代表系統(tǒng)輸入流

System.out.println("請輸入一個整數(shù):");

int n=input.nextInt();

System.out.println("輸入數(shù)字為:"+n);

//2獲取該整數(shù)的每一位數(shù)字

//2.1 默認(rèn)和為0,積為1

int sum=0, mul=1;

//2.2 將數(shù)字轉(zhuǎn)化為字符串鸿竖,使用String類的.charAt()方法提取字符串中的每個元素

// 整型=>字符串

String strNumber=String.valueOf(n);

for(int i=0; i < strNumber.length(); i++) {

? ? char c=strNumber.charAt(i);

? ? //2.3 將字符轉(zhuǎn)化為字符串铸敏,再將字符串轉(zhuǎn)化為整型缚忧,進(jìn)行運(yùn)算

? ? // 字符=>字符串=>整型

? ? // 分步實(shí)現(xiàn)

//? String str=String.valueOf(c);

//? int num=Integer.parseInt(str);

? ? // 組合實(shí)現(xiàn)

? ? int num=Integer.parseInt(String.valueOf(c));

? ? //2.4 累積

? ? mul *=num;

? ? //2.5 累加

? ? sum+=num;

}

//3進(jìn)行做差計算

int result=mul-sum;

//4輸出

System.out.println("運(yùn)算結(jié)果為:"+result);


3.2.2 代碼結(jié)果:

請輸入一個整數(shù):

567

輸入數(shù)字為:567

運(yùn)算結(jié)果為:192


3.3 方式三:如果你的程序中需要多次計算搔谴,可以將實(shí)現(xiàn)的代碼寫作方法,在主函數(shù)中調(diào)用即可敦第。

3.3.1 代碼如下:

public static void main(String[] args) {

? ? //1.獲取輸入數(shù)字

? ? Scanner input=new Scanner(System.in);

? ? System.out.println("請輸入數(shù)字:");

? ? int n=input.nextInt();

? ? System.out.println("輸入數(shù)字為:"+n);

? ? //2.調(diào)用方法并輸出

? ? // 方法1:

? ? System.out.println("計算結(jié)果1:"+diff1(n));

? ? // 方法2:

? ? System.out.println("計算結(jié)果2:"+diff2(n));

}

// 方法1:

public static int diff1(int n) {

? ? //1.默認(rèn)和等于0,積等于1

? ? int sum=0, result=1;

? ? //2.判斷數(shù)字是否為0

? ? while(n !=0) {

? ? ? ? //3.獲取當(dāng)前數(shù)字的個位

? ? ? ? int num=n %10;

? ? ? ? //4.進(jìn)行計算

? ? ? ? //4.1累加

? ? ? ? sum+=num;

? ? ? ? //4.2累乘

? ? ? ? result *=num;

? ? ? ? //5.改變當(dāng)前數(shù)字的大小

? ? ? ? n=n /10;

? ? }

? ? return result-sum;

}

?

// 方法2:

public static int diff2(int n) {

? ? //1.默認(rèn)和等于0鞠呈,積等于1

? ? int sum=0, result=1;

? ? //2.將整型轉(zhuǎn)化為字符串類型

? ? String strNumber=String.valueOf(n);

? ? //3.獲取字符串的每個字符

? ? for(int i=0; i < strNumber.length(); i++) {

? ? ? ? char c=strNumber.charAt(i);

? ? ? ? //4.類型轉(zhuǎn)換

? ? ? ? // 字符=>字符串=>整型

? ? ? ? String s=String.valueOf(c);

? ? ? ? int num=Integer.parseInt(s);

? ? ? ? //5.進(jìn)行計算

? ? ? ? sum+=num;

? ? ? ? result *=num;

? ? }

? ? return result-sum;

}


3.3.2 代碼結(jié)果:

請輸入數(shù)字:

567

輸入數(shù)字為:567

計算結(jié)果1:192

計算結(jié)果2:192


如有錯誤右钾,請大家批評指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窘茁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子山林,更是在濱河造成了極大的恐慌邢羔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拜鹤,死亡現(xiàn)場離奇詭異,居然都是意外死亡明也,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門诡右,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轻猖,“玉大人域那,你說我怎么就攤上這事〈卧保” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵市殷,是天一觀的道長刹衫。 經(jīng)常有香客問我醋寝,道長,這世上最難降的妖魔是什么囱桨? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任嗅绰,我火速辦了婚禮,結(jié)果婚禮上窘面,老公的妹妹穿的比我還像新娘。我一直安慰自己财边,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布们童。 她就那樣靜靜地躺著鲸鹦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馋嗜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天甘磨,我揣著相機(jī)與錄音眯停,去河邊找鬼济舆。 笑死莺债,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的齐邦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼我纪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浅悉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤之宿,失蹤者是張志新(化名)和其女友劉穎苛坚,沒想到半個月后比被,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泼舱,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年尺迂,在試婚紗的時候發(fā)現(xiàn)自己被綠了冒掌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡股毫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祭陷,到底是詐尸還是另有隱情,我是刑警寧澤兵志,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布宣肚,位于F島的核電站,受9級特大地震影響霉涨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嵌纲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一逮走、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧师溅,春花似錦茅信、人聲如沸墓臭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窑多,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埂息,已是汗流浹背遥巴。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铲掐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓砸彬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砂碉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容