a^b的前n位数
假设我们现在需要知道 ab 的后 n 位数或前 n 位数,简单直观的做法就是求出 ab 的值,然后在分别取前 n位或后 n位,不过在 a,b很大的情况下显然是无法存储的。所以,直接求是不可能的了。
让我们先来看看后 n 位如何求?因为我们只要后 n 位,那么我们都知道把 ab 的值模上一个10n 就是所求。根据求模的性质:ab % n = (a%n)b % n;然后用快速幂跑一遍即可。
int QuickPow (__int64 a, __int64 b)
{
__int64 r = ;
while (b)
{
if (b&)
r = (r*a) % (__int64)pow(10.0, n*1.0);
a = ( a*a) % (__int64)pow(10.0, n*1.0);
b >>= ;
}
return r;
}
关键是前 n 如何求?我们假设 ab = c。再设 log10 (c) = d。另 Int 为 d 的整数部分,k 为小数部分,那么 10Int = 100......0(共Int个0),不难发现,除了第一位是1外其余均为0,也就说,10k 最终将直接影响最左边的 N 位数。将这个结果乘以1,就是前1位的答案,乘以10,就是前2位的答案。。。类推!
后来发现任何一个数字 n 都可以表示成10(a+b) 。其中 a整数,b为小数。例如
n=87455时,a=4,b=0.941784644.
有规律.10a =10000.10b =8.7455.
所以n的左边数起第一位数字。就是10b 的第一位有效数字,第二数字,是10^b的第二位有效数字。。。。以次类推
以hdu 1060为例:
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std; int main()
{
int t;
__int64 n;
__int64 Int;
double a, d;
scanf("%d", &t);
while(t--)
{
scanf("%I64d", &n);
a = n*log10(n*1.0);
Int = (__int64)a;
d = a - Int;
printf("%I64d\n", (__int64)pow(, d));
}
return ;
}
a^b的前n位数的更多相关文章
- ACM_求N^N的前5位数和后5位数(数论)
NNNNN Time Limit: 2000/1000ms (Java/Others) Problem Description: 对于整数N,求N^N的前5位和后5位(1057题加强版) Input: ...
- Python给数字前固定位数加零
python中有一个zfill方法用来给字符串前面补0,非常有用 n = " s = n.zfill(5) " zfill()也可以给负数补0 n = "-123&quo ...
- Java四舍五入时保留指定小数位数
方式一: double f = 3.1516; BigDecimal b = new BigDecimal(f); , BigDecimal.ROUND_HALF_UP).doubleValue(); ...
- [hdu 1568] Fibonacci数列前4位
2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2 ...
- java.math.BigDecimal保留两位小数,保留小数,精确位数
http://blog.csdn.net/yuhua3272004/article/details/3075436 使用java.math.BigDecimal工具类实现 java保留两位小数问题 ...
- 第17题:打印1到最大的n位数
面试题17:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 考点: 用字符串或者数组表达一个大数. 思路 1. ...
- ACM_求N^N的最高位数
Leftmost Digit Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定一个正整数N,你应该输出N ^ N的最左边的数字 ...
- java小数保留位数四舍五入
方法一:四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, Roundin ...
- JAVA代码验证身份证信息
java验证身份证信息代码 转自:http://www.blogjava.net/xylz/archive/2011/01/05/342330.html import java.util.Calend ...
随机推荐
- 初学QML之qmlRegisterType
qmlRegisterType 是一个可以将C++实现的类在QML中调用的,连接C++和QML的一个工具 首先来看QtAssistant的介绍 int qmlRegisterType(const ch ...
- About USB Data Link Cable API
About USB Data Link Cable API The text on this webpage is licensed under the Creative Commons Attrib ...
- github多人协作
1.字符串处理(编码原理) git clone git@github.com:lookphp/LaravelCms.git git add . git commit -m "修改的内容-需要 ...
- python视频教程大全集下载
python3英文视频教程(全87集) http://pan.baidu.com/s/1dDnGBvV Python从入门到精通视频(全60集)链接:http://pan.baidu.com/s/1e ...
- Makefile的几个赋值运算符(转:笔记)
http://www.cnblogs.com/pengdonglin137/p/3801060.html 在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢? ...
- Http GET、Post方式的请求总结
读取http响应信息,并返回响应体 /// <summary> /// 读取http响应信息,并返回响应体 /// </summary> /// <param name= ...
- word2pdf
在网上现在能查到的,并且能通过php调用相关接口,将word转换成pdf文件的有openoffice,访问网址为http://www.openoffice.org/download/index.htm ...
- 安装Oracle10g on RedHat as 4 64bit(摘)
一.安装前的配置 1.修改RH版本 vi /etc/redhat-release Red Hat Enterprise Linux AS release 3 (Taroon Update 3) 2. ...
- qt之fillder抓包(QT网络版有一些具体的坑)
最近项目中使用到了Qt的网络库,在用的过程中也发现了不少坑和问题,本文仅仅作为记录,方便日后查阅. 因为我们整个客户端的gui都是使用qt来完成的,心想qt既然有网络库,而且真心觉着qt封装的控 ...
- 炫酷吊炸天的nodeppt
由于要做一个关于node的分享,要准备写一个ppt方便就行交流.之前用的比较多的是slides(http://www.slides.com),最近知道了一个node写的工具,可以生成ppt,号称很强大 ...