【POJ 1001】Exponentiation (高精度乘法+快速幂)
BUPT2017 wintertraining(15) #6A
题意
求\(R^n\) ( 0.0 < R < 99.999 )(0 < n <= 25)
题解
将R用字符串读进来,找到小数点的位置,然后转为整数。
用高精度乘法和快速幂计算。输出时要确定一下小数点的位置。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int base=10;
struct Num{
int a[1000],len;
Num(){memset(a,0,sizeof a);}
void input(int b){
int i;
if(b==0)len=1;
for(i=0;b;i++){
a[i]=b%base;
b/=base;
}
len=i;
}
void output()const {
for(int i=len-1;i>=0;i--){
printf("%d",a[i]);
}
puts("");
}
Num operator *(const Num &b)const{
Num c;
for(int i=0;i<len;i++)
for(int j=0;j<b.len;j++){
c.a[i+j]+=a[i]*b.a[j];
}
c.len=len+b.len-1;
for(int i=0;i<c.len;i++){
if(c.a[i]>=base){
c.a[i+1]+=c.a[i]/base;
c.a[i]%=base;
}
}
if(c.a[c.len])c.len++;
return c;
}
};
char s[1000],ans[1000];
int d;
Num qpow(Num n,int d){
Num ans;ans.input(1);
while(d){
if(d&1)ans=ans*n;
n=n*n;
d>>=1;
}
return ans;
}
int main() {
while(cin>>s>>d){
int i,j,b=0;
for(i=0;s[i];i++){
if(s[i]=='.'){j=i;}
else b=b*10+s[i]-'0';
}
int l=(i-j-1)*d;
Num c;c.input(b);
c=qpow(c,d);
for(i=c.len-1;i>=l;i--){
printf("%d",c.a[i]);
}
for(j=0;c.a[j]==0;j++);
if(i>j)printf(".");
for(i=l-1;i>=j;i--)printf("%d",c.a[i]);
puts("");
}
return 0;
}
【POJ 1001】Exponentiation (高精度乘法+快速幂)的更多相关文章
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- 乘方快速幂 OR 乘法快速幂
关于快速幂这个算法,已经不想多说,很早也就会了这个算法,但是原来一直靠着模板云里雾里的,最近重新学习,发现忽视了一个重要的问题,就是若取模的数大于int型,即若为__int64的时候应该怎么办,这样就 ...
- poj 3070 && nyoj 148 矩阵快速幂
poj 3070 && nyoj 148 矩阵快速幂 题目链接 poj: http://poj.org/problem?id=3070 nyoj: http://acm.nyist.n ...
- POJ 1001 Exponentiation(大数运算)
POJ 1001 Exponentiation 时限:500 ms 内存限制:10000 K 提交材料共计: 179923 接受: 43369 描述:求得数R( 0.0 < R < ...
- Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)
/* 矩阵乘法+快速幂. 一开始迷之题意.. 这个gcd有个规律. a b b c=a*x+b(x为常数). 然后要使b+c最小的话. 那x就等于1咯. 那么问题转化为求 a b b a+b 就是斐波 ...
- [POJ 1001] Exponentiation C++解题报告 JAVA解题报告
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30 ...
- 整数快速乘法/快速幂+矩阵快速幂+Strassen算法
快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c 二.矩 ...
- 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2
1732 Fibonacci数列 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 在“ ...
- POJ 3150 Cellular Automaton --矩阵快速幂及优化
题意:给一个环,环上有n块,每块有个值,每一次操作是对每个点,他的值变为原来与他距离不超过d的位置的和,问k(10^7)次操作后每块的值. 解法:一看就要化为矩阵来做,矩阵很好建立,大白书P157页有 ...
随机推荐
- Create a toolwindow for the VBA editor with .NET(C#).
原始出处:http://www.cnblogs.com/Charltsing/p/VBEtoolwindow.html 最近有人问起使用C#在VBE插件中创建toolwindow的事情,由于VBE窗口 ...
- MySQL 主从同步遇到的问题及解决方案
在做某个项目的时候,使用主从数据库,master负责update.delete.insert操作,而slave负责select操作. 情景1:发表文章与查看文章 可以认为这个项目是一个博客系统,这里就 ...
- CI框架在模型中切换读写库和读写库
如果你想在控制器中切换在application/config/database.php中配置好的数据库group,那么你可以参考这篇博客:CI框架在控制器中切换读写库和读写库 如果你是希望在模型中切换 ...
- JAVAString初始化的引用问题
1 String a="Hello JAVA"; 2 3 String b=a; 4 5 System.out.println(a); 6 7 System.out.println ...
- Windows10下安装VMware虚拟机并搭建CentOS系统环境
转载: http://blog.51cto.com/10085711/2069270 操作系统 Windows 10专业版(64位) VMware虚拟机 产品:VMware® Workstation ...
- sys模块进度条玩法笔记
#! /user/bin/env python# -*- encoding:utf-8 -*-import time,sys for i in range(31): sys.stdout.write( ...
- 【学亮IT手记】利用字节流复制图片
- 【学亮IT手记】使用Map代替switch...case语句
- day 7-17 多表查询
一. 准备表 #部门表 create table dep( id int, name varchar(20) ); #员工表 create table emp( id int primary key ...
- js获取数组中相同元素数量
<script> var array = new Array(1,2,5,1,4,4,2,3,5,1,1,5,5,5,6,7,3,9,9,10); var arr = new Array( ...