CodeSprout程式萌芽
中等第 150 題 · 數字拆位紀錄
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|數字拆位紀錄

官方解答|數字拆位紀錄

解題思路

先取 n 的絕對值。do-while 每輪用 % 7 取得最低位,再用 / 7 移除該位,依由低至高的順序計算位數總和。最後乘上 Integer.signum(n),還原正負或零的符號。

正確性與邊界

do-while 保證 n=0 仍執行一輪;唯一位數為 0。拆位階段只處理絕對值;最後的符號或位數調整依題意執行。

複雜度

時間 O(log_7(max(1, |n|))),額外空間 O(1)。

公開範例

輸入 {"n": 1},依上述步驟得到 1。

下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。

CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式

import java.util.*;

public class Solution {

    public static int solve(int n) {
        int value = Math.abs(n), answer = 0, index = 0;
        do {
            int digit = value % 7;
            answer += digit;
            value /= 7;
            index++;
        } while (value != 0);
        return answer*Integer.signum(n);
    }
}

留言討論 0