【JAVA】UVA 10929 - You can say 11
題目原文:https://onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=1870
Sample Input
112233
30800
2937
323455693
5038297
112234
0
Sample Output
112233 is a multiple of 11.
30800 is a multiple of 11.
2937 is a multiple of 11.
323455693 is a multiple of 11.
5038297 is a multiple of 11.
112234 is not a multiple of 11.
題目大意:判斷一個1000位以下的正整數是否為11的倍數,若輸入0則停止程式。
解題方向:
-
判斷11的倍數:
a)奇位數總和減去偶位數總和等於0或11的倍數
b)直接取11的餘數看是否為0 -
位數最多到1000位,所以用BigInteger
BigInteger的用法:
透過字串將數字傳給BigInteger。
常使用的建構子有:
- BigInteger(String val) : 將BigInteger的十進制String表示轉換為BigInteger。
- BigInteger(String val, int radix): 用於轉換為BigInteger的指定基數為一個BigInteger的字符串表示形式。
更多用法請看Java.math.BigInteger類實例
若是有不能處理的數字142543256745643257535
則使用BigInteger處理:
String bigIntStr = "142543256745643257535";
BigInteger a = new BigInteger(bigIntStr);
System.out.print(a);
執行結果:142543256745643257535
解法
import java.util.*;
import java.math.BigInteger; //記得要將BigInteger import進來
public class main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String y = sc.next();
BigInteger x = new BigInteger(y); //透過字串將數字傳給BigInteger
if(x.equals(BigInteger.ZERO))break; //當BigInteger值等於0時結束程式
if(x.mod(new BigInteger("11")).equals(BigInteger.ZERO)){ //當BigInteger值能被11整除時代表該數為11的倍數
System.out.println(y+" is a multiple of 11.");
}else{
System.out.println(y+" is not a multiple of 11.");
}
}
}
};