天天看點

HDOJ1013 Digital Roots

題目連結:Digital Roots

給出一個正整數,然後将該整數的每一位加起來,如果是隻有個位數,就輸出。

如果還大于10,就繼續将每一位加起來,直到隻有個位數。

但是值得注意的是,題目沒講整數的範圍,是以應該是使用大數BigInteger的。

下面AC代碼:

import java.math.BigInteger;
import java.util.Scanner;

public class Main{
	private static Scanner scanner;
	public static void main(String[] args) {
		scanner = new Scanner(System.in);
		while(scanner.hasNext()){
			String string = scanner.next();
			if(string.equals("0")){
				break;
			}
			BigInteger n = new BigInteger(string);
			BigInteger ten = new BigInteger(""+10);
			BigInteger zero = new BigInteger(""+0);
			while(n.compareTo(new BigInteger(""+9))>0){//這裡注意,是大于9,因為是兩位數
				BigInteger vol = n;
				BigInteger sum = zero;
				while(vol.compareTo(zero)>0){//大于零就要繼續加
					//sum += vol%10;
					//vol /= 10;
					sum = sum.add(vol.remainder(ten));
					vol = vol.divide(ten);
				}
  			        //System.out.println(sum);
				n = sum;
			}
			System.out.println(n);
		}
	}
}

/*
                        //這裡是WA的,應該使用上面的大數的方法。
                       while(scanner.hasNext()){
			int n = scanner.nextInt();
			if(n == 0){
				break;
			}
			
			while(n>=10){
				int vol = n;
				int sum  = 0;
				while(vol>0){
					sum += vol%10;
					vol /= 10;
				}
				n = sum;
			}
			System.out.println(n);
*/