oj赛(第22周)老式计算器
解题思路
- 第一步优化:首先我们需要考虑到某些特殊情况,即当k==1和k>n时,都会出现循环n次的情况(因为每次都只-1),面对这种情况,可以直接得出答案,即操作步数等于n。
- 第二步优化:当循环到的当前n并不与k整数的时候,我们首先想到的是n-1然后操作次数+1,这种做法依然不是最优的,因为直到下一次整除的数出现之前,都是在重复-1操作。因此,我们可以一次性跳到下一个整除的数之前,如何实现呢?即操作数直接加上当前n与k的余数,相应的,n减去跳过的步数。
代码
#include<stdio.h>
int main()
{
int n,k; int size=0;
scanf("%d %d",&n,&k);
if(k==1 || k>n){ printf("%d",n); }
else{
while(n != 0){
if(n%k==0){
n=n/k;
size++;
}else{
size=size+n%k;
n=n-n%k;
}
}
printf("%d",size);
}
return 0;
}