進位制均值-進位制轉換+最大公約數

許佳佳233發表於2017-07-23

題目

儘管是一個CS專業的學生,小B的數學基礎很好並對數值計算有著特別的興趣,喜歡用計算機程式來解決數學問題,現在,她正在玩一個數值變換的遊戲。她發現計算機中經常用不同的進製表示一個數,如十進位制數123表達為16進位制時只包含兩位數7、11(B),用八進位制表示為三位數1、7、3,按不同進製表達時,各個位數的和也不同,如上述例子中十六進位制和八進位制中各位數的和分別是18和11,。
小B感興趣的是,一個數A如果按2到A-1進製表達時,各個位數之和的均值是多少?她希望你能幫她解決這個問題?
所有的計算均基於十進位制進行,結果也用十進位制表示為不可約簡的分數形式。

輸入描述:

輸入中有多組測試資料,每組測試資料為一個整數A(1 ≤ A ≤ 5000).

輸出描述:

對每組測試資料,在單獨的行中以X/Y的形式輸出結果。

輸入例子1:

5
3

輸出例子1:

7/3
2/1

思路

題目非常基礎,當做複習。
主要包括十進位制與其他進位制的轉換和輾轉相除法。

程式碼

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()) {
            int num = scan.nextInt();

            int sum = 0;
            for (int i = 2; i < num; i++) {
                int n = num;
                while (n != 0) {
                    sum += n % i;
                    n /= i;
                }
            }

            int g = gcd(sum, num - 2);
            System.out.println("" + sum/g + '/' + (num - 2)/g);
        }

    }

    //輾轉相除法
    private static int gcd(int a, int b) {
        if (b == 0)
            return a;
        return gcd(b, a % b);
    }

}

相關文章