題目:Number Palindrome
創立名為的method,接收名為的參數,回傳。
創立名為isPalindrome的method,接收名為number的int參數,回傳boolean。
判別number是否為回文數(跟倒過來一樣 ex:123,12321,-1221)
測試數據:
System.out.println(isPalindrome(-111));
System.out.println(isPalindrome(110));
System.out.println(isPalindrome(101));
System.out.println(isPalindrome(25));
System.out.println(isPalindrome(11212));
System.out.println(isPalindrome(-1221));
System.out.println(isPalindrome(707));
結果:
true
false
true
false
false
true
true
題目:First And Last Digit Sum
創立名為sumFirstAndLastDigit的method,接收名為number的int參數,回傳int。
用loop找出number的第一位數跟最後一位數,相加後回傳。
P.S number為個位數的話也是相加,number = 3 → 3 + 3 要return 6。
若number為複數回傳-1。
測試數據:
System.out.println(sumFirstAndLastDigit(252));
System.out.println(sumFirstAndLastDigit(257));
System.out.println(sumFirstAndLastDigit(0));
System.out.println(sumFirstAndLastDigit(5));
System.out.println(sumFirstAndLastDigit(-10));
結果:
4
9
0
10
-1
題目:Even Digit Sum
創立名為getEvenDigitSum的method,接收名為number的int參數,回傳int。
把number裡面的每個偶數相加後回傳。
若number為複數回傳-1。
測試數據:
System.out.println(getEvenDigitSum(123456789));
System.out.println(getEvenDigitSum(252));
System.out.println(getEvenDigitSum(-22));
結果:
20
4
-1
題目:Shared Digit
創立名為hasSharedDigit的method,接收2個int參數,回傳boolean。
2個參數都需要在10–99(皆包含)的範圍內,否則返回false。
12,23 皆含2,且在範圍內,返回true
15,55 皆含5,且在範圍內,返回true
9,99 皆含9,但第一個數9不在10–99範圍內,返回false。
測試數據:
System.out.println(hasSharedDigit(12, 23));
System.out.println(hasSharedDigit(9, 99));
System.out.println(hasSharedDigit(15, 55));
結果:
true
false
true
題目:Last Digit Checker
創立名為hasSameLastDigit的method,接收3個int參數,回傳boolean。
三個參數皆須在範圍10–1000(皆包含),否則回傳false。
如果至少兩個參數的個位數是一樣的回傳ture,否則回傳false。
ex: 41, 22, 71 兩個 個位數為1 回傳true
創立名為isValid的method,接收int參數,回傳boolean。
判斷傳入的參數是否在範圍10–1000(皆包含)是回傳true,否則回傳false。
測試數據:
System.out.println(hasSameLastDigit(42, 22, 71));
System.out.println(hasSameLastDigit(23, 42, 42));
System.out.println(hasSameLastDigit(9, 99, 999));
結果:
true
true
false
題目:Greatest Common Divisor
創立名為getGreatestCommonDivisor的method,接收名為first跟second的int參數,回傳int。
如果其中一個 < 10,回傳 -1。
判斷最大公因數並回傳
測試數據:
System.out.println(getGreatestCommonDivisor(25, 15));
System.out.println(getGreatestCommonDivisor(12, 30));
System.out.println(getGreatestCommonDivisor(9, 18));
System.out.println(getGreatestCommonDivisor(81, 153));
結果:
5
6
-1
9
參考答案
Number Palindrome
回文數我卡了超久約2~3個小時
先是卡在第17行的邏輯,到底怎麼把數字倒過來塞到變數裡去
我那時候把reverse + digit 一起乘10,拿紙筆弄半天才發現哪裡錯了
還卡在如果有0的情況,好像還卡在設original_number
之前
沒注意到直接丟number計算,把value也一起改變
最後 reverse == number
的比對 怎樣都錯
本題邏輯講解
先取個位數 下一次循環 之前取的數字*10再加上這輪取的個位數 反覆循環
參數 123
第一輪
取個位數3
第二輪
剩12
取個位數2
前面取的3*10
2+30變成32
第三輪
剩1
取個位數1
前面取的32*10
1+320變成321
123 != 321
得到 false
完成
也不用怕遇到0
例如10
第一輪
取個位數0
第二輪
剩1
前面取的 0 * 10 = 0
1 + 0 = 1
10 != 1
得到 false
完成
First And Last Digit Sum
Even Digit Sum
Shared Digit
先是用簡單的方法寫了一遍
優化寫法
看起來很複雜其實很簡單
第一個while取個位數
與第二個while的每輪個位數比較
一樣就返回true
沒有一樣就進行第一個while的下一個位數
再與第二個while的每輪個位數比較
數字化就是
12 與 34
用2 跟4比 再跟3比
再用1 跟4比 再跟3比
比完都沒有就false
若中間有遇到一樣就true 然後 break退出循環
好處是不管今天題目改幾位數,這邏輯都能用
10位數 對 10位數
10位數 對 2位數
用這方法跑都能成功
Last Digit Checker
Greatest Common Divisor
一開始卡了一陣子,沒啥頭緒
所以先寫了兩段分開的for 各取得自己的最大因數
後來想到第一個因數 也要拿到second一個一個去比 設法找出最大公因數
想說是不是要搞個for 中 for
後來靈光一閃
不用那麼麻煩
用同時滿足來判斷就好
就寫了if((first % i == 0) && (second % i == 0))
滿足一次就更新數字
所以最後的數字一定就是最大公因數
整個簡單了許多
i 的中止條件設 i <= (first / 2)
不用循環到本身的數
減少循環次數
如果因數不包含2 那最大的因數不會超過 自身/2
如果有含2那最大因數就是 自身/2
第二種解法 同學分享的
真TM聰明!!!
用輾轉相除法就搞定了
大神阿~~
我都忘記有這東西了