【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則停止程式。

解題方向:

  1. 判斷11的倍數:
    a)奇位數總和減去偶位數總和等於0或11的倍數
    b)直接取11的餘數看是否為0

  2. 位數最多到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.");
            }
            
            }
    }
};