解题说明:利用二分搜索,属于找下界的题目,需要注意两种情况:
1. 当n<k的时候直接输出n即可,
2. 当n特别大的时候计算出来的sum值以及k^p的结果可能会超出int范围故需要用long long 保存。
#include <cstdio>
#include<iostream>
using namespace std;
int main()
{
int n, k, v, i, sum;
scanf("%d%d", &n, &k);
v = n / k * (k - 1);
do
{
sum = 0;
i = 1;
while (v / i > 0)
{
sum += v / i;
i *= k;
}
if (sum < n)
{
++v;
}
else
{
break;
}
}
while (1);
printf("%d\n", v);
return 0;
}