java面试题,输入一串数字,输出大写金额,如123 输出壹佰贰拾叁整。
今天面試了一家公司,面試的Java初級開發,實習的崗位。面試題也都挺簡單的,給了四道題,讓我挑一道做。我就選了第一道:
輸入一串數字,輸出其大寫金額,
如:123
輸出:壹佰貳拾叁整
之前一直在搞自己的服務器,外加一個月沒碰java了,在準備考公務員,面試的時候突然發現自己啥都忘了,差點連最基礎的Scanner都寫不出了。
現在回來我好好寫一下這個代碼,當時在哪里只寫到了萬位以后的
讓我們來先分析一下
輸出大寫金額,這個第一個想到的就是switch-case
然后就是數位,舉個例子123
我們要輸出壹佰貳拾叁,那就要從左到右,先是壹,百位,二,十位,三,整
這就需要我們判斷一次數字在判斷一下數位,
再來個例子,10000和10086
我們這次要輸出壹萬整 和 壹萬零捌拾陸整
這個邏輯就是我們要判斷 :
if(前一個數字是否為零&&當前數字不為零){
輸出(“零”+數字+數位)
}
輸出數字;
輸出數位;
下面我們代碼實現這個邏輯
/*** 輸入一串數字,輸出大寫金額,如123 輸出壹佰貳拾叁整。* * @param args*/public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("請輸入一串數字");String num = input.nextLine();// for循環中盡量不要用String +=的方式拼接,可以用StringBuilderboolean perviousIsZero = false;StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < num.length(); i++) {int a = num.charAt(i);// 判斷當前是否為零if (a == 48) {perviousIsZero = true;continue;}// 判斷數字前一個是否是零且當前數字不為零if (perviousIsZero) {if (a != 48) {stringBuilder.append("零");perviousIsZero = false;} else {// 都是零就跳過continue;}}// 獲取數字大寫stringBuilder.append(getUpperCase(a));// 獲取數位stringBuilder.append(getDigitPlace(num.length() - i));}System.out.println(stringBuilder.toString() + "整");}/*** 獲取數位* * @param i* @return*/private static String getDigitPlace(int i) {switch (i) {case 2:case 6:case 10:return "拾";case 3:case 7:case 11:return "佰";case 4:case 8:case 12:return "仟";case 5:case 13:return "萬";case 9:return "億";default:return "";}}/*** 輸出數字的大寫* * @param a* @return*/private static String getUpperCase(int a) {switch (a) {case 49:return "壹";case 50:return "貳";case 51:return "叁";case 52:return "肆";case 53:return "伍";case 54:return "陸";case 55:return "柒";case 56:return "捌";case 57:return "玖";default:return "";}}我們運行一下看看
輸出都正常,那我們看看長一點的
這里十萬億位出現了錯誤,是因為我們switch case只寫到了第13位數,超出
了我們默認就沒有數位了。所以這里還有地方可以優化。
這里單位有問題,不應該用萬億這個單位,千億后面就是兆了,所以一般差不多計算到千億就可以了,再往后就沒太大意義了
其實做這個題的時候發生了兩件挺尷尬的事情,我第一眼看到這個題的時候,我還以為只是要把數字轉成大寫形式,沒注意是要有數位,還對面試官說這第一題太簡單,我可以把順便第一道做了后再做一道題(本來是四選一的題)。
結果發現自己眼瞎,其實邏輯還是要想一想的,外加一個月沒碰java(之前都在搞自己的服務器和 搞數據清洗)我差點連Scanner都忘記怎么寫了,還好面試官當時有事離開了一會,我在這一行Scanner這就卡了幾分鐘。后來面試官到時間了過來看了看我,發現我還沒寫好,我當時真的尷尬到頭暈,沒開玩笑,是真的頭暈了,看代碼都在晃的那種。
總結了下,現在發現自己的基礎真的差呀,這最基本的都能忘記。現在還是在把基礎多練練,不然都生疏了。
總結
以上是生活随笔為你收集整理的java面试题,输入一串数字,输出大写金额,如123 输出壹佰贰拾叁整。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 毒鸡汤
- 下一篇: 百度虚拟服务器上传,百度云虚拟主机好用吗