數根

題目描述

  數根能夠經過把一個數的各個位上的數字加起來獲得。若是獲得的數是一位數,那麼這個數就是數根;若是結果是兩位數或者包括更多位的數字,那麼再把這些數字加起來。如此進行下去,直到獲得是一位數爲止。
  好比,對於24來講,把2和4相加獲得6,因爲6是一位數,所以6是24的數根。再好比39,把3和9加起來獲得12,因爲12不是一位數,所以還得把1和2加起來,最後獲得3,這是一個一位數,所以3是39的數根。如今給你一個正整數,輸出它的數根。java

1.1 輸入描述:

  輸入包含多組數據。
  每組數據包含一個正整數n(1≤n≤10100)。算法

1.2 輸出描述:

  對應每一組數據,輸出該正整數的數根。測試

1.3 輸入例子:

24
39

 

1.4 輸出例子:

6
3

 

2 解題思路

  由於輸入的數據能夠很是大,因此收的數字必須用字符串進行表示s。先對s中的每個數位進行相加,能夠獲得一個整數n,若是n小於10能夠直接返回結果,若是n大於等於10,對n進行處理,求每一個數位上的和m,再判斷m是否小於10,是就返回,不是就採用一樣的方法進行處理。spa

3 算法實現

import java.util.Scanner;

/**
 * Declaration: All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
        while (scanner.hasNext()) {
            String num = scanner.next();
            System.out.println(solve(num));
        }

        scanner.close();
    }

    /**
     * 求數字的數根
     *
     * @param num 字符串表示的數字
     * @return 數根
     */
    private static int solve(String num) {


        int n = 0;

        for (int i = 0; i < num.length(); i++) {
            n += num.charAt(i) - '0';
        }

        int i;
        int t;
        while (n >= 10) {
            i = n;
            t = 0;
            while (i != 0) {
                t += i % 10;
                i /= 10;
            }
            n = t;
        }
        return n;
    }
}

 

4 測試結果

這裏寫圖片描述

相關文章
相關標籤/搜索