题目描述:

有一天,小明给了你两个数字n和k,现在,你需要对数字n进行一下操作:
对于每一步操作,你可以选择下面其中一个项目:
1.将n的值减少1.
2.如果n能被k整除,可以使n/k
比如:n=27,k=3,你可以进行下列操作:27→26→25→24→8→7→6→2→1→0
请你计算出数字n变为0时最少需要的操作数。

输入:
第一行输入一个整数t(1≤t≤100),表示数据个数
接下来n行,每行2个整数n和k(1≤n≤1e18,2≤k≤1e18)

输出:
将数字n变为0的最小次数

输入样例:
3-;2
输出样例:
8
19

样例说明:
对于第一组数据,有:59→58→57→19→18→6→2→1→0
对于第二组数据,可以连续除以18个10使n变为1。

题目分析

首先可以先想到一个暴力的做法,也就是照着题目做

#include<cstdio>
int t;
long long n;
long long k;
int main(){
scanf("%d",&t);
while(t--)
{
long long ans=0;
scanf("%lld %lld",&n,&k);
while(n!=0)
{
if(n%k==0)
{
n/=k;
ans++;
}
else
{
ans++;
n--;
}
}
printf("%lld\n",ans);
}
return 0;
}

不出所料,果然,超时了
然后,寻找优化时,发现,也就只能优化–1的部分,也就是用%,把n削成能够被/k的地步

#include<cstdio>
int t;
long long n;
long long k;
int main(){
scanf("%d",&t);
while(t--)
{
long long ans=0;
scanf("%lld %lld",&n,&k);
while(n!=0)
{
if(n%k==0)
{
n/=k;
ans++;
}
else
{
ans+=n%k;
n-=n%k;
}
}
printf("%lld\n",ans);
}
return 0;
}

最新文章

  1. Rafy 框架 - 幽灵插件(假删除)
  2. 过段时间逐步使用HTML5新增的web worker等内容
  3. iOS蓝牙开发CoreBluetooth快速入门
  4. GFW-新闭关锁国政策
  5. 第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为
  6. sql附加数据库错误5120
  7. css015 定位网页上的元素
  8. js函数的几个特殊点
  9. WPF开发时光之痕日记本(一)——富文本编辑器
  10. 网络流量监控shell脚本
  11. 【BZOJ】【2463】【中山市选2009】谁能赢呢?
  12. Cognos请求流程——&lt;转&gt;
  13. 云平台编程与开发(七)-使用X5Cloud云平台开发网络彩讯
  14. spin.js无图片实现loading进度条,支持但非依赖jquery
  15. poj_3122:Pie(二分)
  16. 学习笔记:webpack深入与实践(一)
  17. Scala中 object 和 class的区别
  18. Linux编程 11(shell全局环境变量与局变环境变量)
  19. jQuery之动画
  20. Highcharts之折线图

热门文章

  1. 南京邮电大学CTF密码学之MD5-golang与php代码实现
  2. R数据分析:变量间的非线性关系,多项式,样条回归和可加模型
  3. 30个类手写Spring核心原理之依赖注入功能(3)
  4. 关于后端 Entity Model Domain 的分界线
  5. Asp.Net Core基础篇之:白话管道中间件
  6. AcWing3544. 寻找变化前的01序列
  7. ACwing1015. 摘花生
  8. 页面图片懒加载、延迟加载(lazyload)
  9. 【LeetCode】26. Remove Duplicates from Sorted Array 解题报告(Python&C++&Java)
  10. 【九度OJ】题目1185:特殊排序 解题报告