程序代码与详细解释:
#include<iostream> // 包含标准输入输出流库,用于输入输出操作
using namespace std; // 使用标准命名空间,避免在调用标准库时重复写std::
long long n, ans; // 定义两个长整型变量n和ans,n用于存储输入的次数,ans用于存储重置的次数
int k, len; // 定义两个整型变量k和len,k用于存储重置的阈值,len用于存储数组d的当前长度
long long d[1000000]; // 定义一个长整型数组d,大小为1000000,用于存储每个位置上的数字
int main(){
cin >> n >> k; // 从标准输入读取两个整数n和k
d[0] = 0; // 初始化数组d的第一个元素为0
len = 1; // 初始化数组d的长度为1
ans = 0; // 初始化重置次数ans为0
for (long long i = 0; i < n; ++i) { // 使用for循环,从0迭代到n-1,共n次
++d[0]; // 将数组d的第一个元素加1
for (int j = 0; j + 1 < len; ++j) { // 遍历数组d,除了最后一个元素外
if (d[j] == k) { // 如果当前元素等于k
d[j] = 0; // 将当前元素重置为0
d[j + 1] += 1; // 将下一个元素加1(如果下一个元素不存在,则会在后续处理中创建)
++ans; // 重置次数ans加1
}
}
if (d[len - 1] == k) { // 检查最后一个元素是否等于k
d[len - 1] = 0; // 如果等于k,则重置为0
d[len] = 1; // 在数组d的末尾添加一个新元素,并初始化为1
++len; // 数组d的长度加1
++ans; // 重置次数ans加1
}
}
cout << ans << endl; // 输出重置次数ans
return 0; // 程序正常结束
}