传送门
循环:求余(打包)、求剩、求和
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long k,n,res,m,left,sum,i;
long long cnt=0;
cin>>n>>k;
sum=n;//key:用sum存储n,避免n改变
do{
m=sum/k;
left=sum-m*k;
sum=m+left;//总数一直在变化
cnt += m ;//新烟数量累加(打包m个k就多m根烟)
}while(sum>=k);
res=n+cnt;//原本可以抽的烟+换取到的新烟
cout<<res;
return 0;
}