(一)
每次先減到不能除為止。
然後比較是除 \(k\) 花費少,還是 透過不斷減 \(1\) 花費少。
當 \(n<k\) 時只用減到 \(1\) 就行了。
特判 \(k=1\)。
(二)
AC 程式碼。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,a,b,ans;
signed main(){
scanf("%lld%lld%lld%lld",&n,&k,&a,&b);
if(k==1)printf("%lld",(n-1)*a);
else if(n==1)printf("0");
else{
while(n>1){
if(n<k){
ans+=(n-1)*a;
break;
}
int rest=n%k;
ans+=rest*a;
n-=rest;
int nxt=n/k;
ans+=min(b,(n-nxt)*a);
n=nxt;
}
printf("%lld",ans);
}
return 0;
}