D-好好好数_牛客周赛 Round 58 (nowcoder.com)
思路:
将 n转换为 k进制
找进制中最大的数
void solve()
{
int n, k;
cin >> n >> k;
if(k == 1) cout << 1 << endl;
else
{
int ans = 0;
while(n) {
ans = max(ans, n%k);
n/=k;
}
cout << ans << endl;
}
}
说明:
60转换三进制是02020,最大的数是2,所以有2个好数(30+30)
疑问:
为什么考虑的是进制数中出现的最大数?
因为n一定是由多个好数组成的,其中每一个好数对应的进制中的数字相同,是成倍的
比如(02020=30+30)(03030 = 30 +30 +30)不会出现(02010)(03020)这些情况