classSolution { public: string smallestGoodBase(string n){ long nVal = stol(n); int mMax = floor(log(nVal) / log(2)); // 枚举所有可能的 m,有 m 个 1 for (int m = mMax; m > 1; m--) { // 计算一下,如果数量为 n,用 k 个 1 表示,那么是几进制数? // 有可能算出来是 5.5 进制数,但是这样的答案没意义,再下取整的话肯定和数量 n 对不上 int k = pow(nVal, 1.0 / m); long mul = 1, sum = 1; // 需要检验一下答案有没有意义,把 m 个 1,k 进制表示,带入计算一下数值,是不是 n for (int i = 0; i < m; i++) { mul *= k; sum += mul; } if (sum == nVal) { returnto_string(k); } } returnto_string(nVal - 1); } };