题目描述:
对于给定的整数 n, 如果n的k(k>=2)进制数的所有数位全为1,则称 k(k>=2)是 n 的一个好进制。
以字符串的形式给出 n, 以字符串的形式返回 n 的最小好进制。
示例 1:
输入:"13" 输出:"3" 解释:13 的 3 进制是 111。
题源:https://leetcode-cn.com/problems/smallest-good-base/
注意点:
string转longlong:stol(string)
string转int:stoi(string)
string转float,转double: stof(string), stod(string)
数字类型转string:to_string(num)
开根号(非平方根),pow( , 1.0/m)
题解:
class Solution { public: string smallestGoodBase(string n) { long long N=stol(n); int maxM=(int)(log(N*1.0)/log(2)); long long k; for(int m=maxM;m>0;m--) { k=(long long)pow(N,1.0/m); // long long s=(1-pow(k,m+1))/(1-k); long long s = 1, mul = 1; // 计算 (11...11)k 对应的十进制值 for (int i = 1; i <= m; ++i) { mul *= k; s += mul; } //printf("m=%d k=%lld s=%lld ",m,k,s); //if(m==6) {printf("%lld ",pow(k,m+1)); printf("%lld",k-1);} if (s==N) return to_string(k); } return to_string(N-1); } };