47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
/*
|
||
代码的作用是十进制的n转换成k进制的数字,输出的ans为进位的次数,len为结果的长度
|
||
*/
|
||
#include <bits/stdc++.h>
|
||
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;
|
||
} |