博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
E - Leading and Trailing
阅读量:6270 次
发布时间:2019-06-22

本文共 1439 字,大约阅读时间需要 4 分钟。

这道题来说,解题的思路非常的重要,不是暴力能解决的题目。n*k = (10^x) * (10^y)  .y的部分是决定位数上面具体的值。因此得到y之后在int first =10^(y+2) ,就是前三位数字。解决这道题必须要用上<cmath> 之下的很多函数,fmod,pow,log10等等。代码之后将详细介绍它们的用法。

code :

#include
#include
#include
#include
#include
using namespace std;typedef long long ll;ll quickpow(ll m,ll n,ll k) //快速幂取模函数,m:底数:指数,k:取模数{ ll ans=1; //结果数ans m=m%k; while(n > 0) //当指数大于0的时候就执行循环 { if(n&1) //跟if(n%2 == 1) 的效果一样 ans = (ans*m)%k; //消除指数为奇数的影响 n=n >> 1; //n的二进制数右移一位; m = (m*m) % k; // 因为指数右移,所以这一步要消除指数右移的影响 } return ans%k;}//其实快速幂取模跟快速幂函数相差无几,只是记得在关键步骤后面要对K取模,防止数据爆掉;int main(){ ll m,n,T; scanf("%lld",&T); for(int i=1;i<=T;i++) { scanf("%lld %lld",&m,&n); int first = pow(10.0,2.0+fmod(n*log10(m*1.0),1)); //cout<<"mod = "<
<

 

 代码上面的:

第一点:%03d  的输出格式,前三位不会出现019这样的情况,但是后三位会出现,当后三位是019这样的情况时,为输出保证是三位数而不是19,就要写成%03d;(这是题目的小陷阱,多注意)。

第二点:n & 1  的书写格式可以参照,意思就是判断数的奇偶性,起到的效果跟n % 2 == 1 一样。

第三点:fmod 函数,double fmod(double x,double y);函数返回x/y的余数。举个例子:在这道题中,a=15.123456的小数部分怎么得到?就是fmod(a,1.0);就可以了。

第四点:double pow(double base,double exp);

第五点:学会熟练运用快速幂取模函数,可以把它跟快速幂函数一起记忆,因为他们之间有很多相似点。

 

最最重要的一点就是这道题的解题思路,log10n=指数。n*k = (10^x) * (10^y)  .10^y 的值才是决定位数上面的具体的值。这是要记下的!!!

转载于:https://www.cnblogs.com/myxdashuaige/p/8992380.html

你可能感兴趣的文章
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>