/* 代码的作用是十进制的n转换成k进制的数字,输出的ans为进位的次数,len为结果的长度 */ #include using namespace std; long long n, ans; int k, len; long long d[1000000]; int main() { cin >> n >> k; //初始化 d[0] = 0; len = 1; //结果的长度最少是1位 ans = 0; //最小的进位是0位 for (long long i = 0; i < n; ++i) { ++d[0]; //每次个位 +1 //进位处理到倒数第二高位 for (int j = 0; j + 1 < len; ++j) { if (d[j] == k) { //如果本位到达了k进制的k这个数,本位置0,向前进1 d[j] = 0; d[j + 1] += 1; ++ans; //记录进位次数 } } //最高位单独处理 涉及到len的调整 if (d[len - 1] == k) { d[len - 1] = 0; d[len] = 1; ++len; ++ans; } //输出k进制的表示法 // for (int i = len - 1; i >= 0; i--) cout << d[i]; // cout << endl; } cout << len << endl; //输出进位次数 // cout << ans << endl; return 0; }