POJ 1001 Exponentiation(大数运算)
| 时限:500 ms | 内存限制:10000 K | |
| 提交材料共计: 179923 | 接受: 43369 |
描述:求得数R( 0.0 < R < 99.999 )的n( 0 < n <= 25 )次方的精确值
样本输入
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
样本输出
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
分析:题中R的n次方远大于double的范围,那么就会想到用数组来存放结果,题目就变成了两个非常大的数相乘,小数相乘可以先把小数点去除,先算出小数点在结果中的位置,再直接计算两个整数相乘的值。
举例:95.123 12
求95.123的12次方的值,即先去除小数点,计算出小数点的位置(3 * 12 = 36), 再把95123相乘12次得出结果,输出时再插入小数点。
代码:
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
const int N = ;
int result[N];
int temp[N];
int main() {
string str;
int n;
while(cin >> str >> n) {
for(int i = ; i < N; i++) result[i] = ;
result[] = ;
int m = ;
int cs[] = {};
int pos;
for(int i = str.size() - ; i >= ; i--) { //去除小数点
if(str[i] != '.') cs[m++] = str[i] - '';
else pos = i;
}
int point = ( - pos)*n;
for(int i = ; i < n; i++) {
for(int j = ; j < N; j++) temp[j] = ;
for(int j = ; j < ; j++) {
if(!cs[j]) continue; //如果乘数为0,那么无需向下执行
int c;
for(int k = ; k < N; k++) { //加到对应的位数上
c = result[k] * cs[j];
temp[k+j] += c;
}
for(int k = ; k < N; k++) { //处理进位
if(temp[k] >= ) {
temp[k+] += temp[k]/;
temp[k] %= ;
}
}
}
for(int j = ; j < N; j++) result[j] = temp[j]; //转存
}
int l = ;
while(!result[l] && l < point) l++;
int r = N - ;
while(!result[r] && r >= point) r--;
for(int i = r; i >= point; i--) cout << result[i];
if(l < point) cout << "."; //如果的小数,那么输出小数点
for(int i = point - ; i >= l; i--) cout << result[i];
cout << endl;
}
return ;
}
POJ 1001 Exponentiation(大数运算)的更多相关文章
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- [POJ 1001] Exponentiation C++解题报告 JAVA解题报告
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30 ...
- POJ 1001 Exponentiation 无限大数的指数乘法 题解
POJ做的非常好,本题就是要求一个无限位大的指数乘法结果. 要求基础:无限大数位相乘 额外要求:处理特殊情况的能力 -- 关键是考这个能力了. 所以本题的用例特别重要,再聪明的人也会疏忽某些用例的. ...
- poj 1001 Exponentiation 第一题 高精度 乘方 难度:1(非java)
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 138526 Accepted: 33859 ...
- POJ 1001 Exponentiation(JAVA,BigDecimal->String)
题目 计算实数a的n次方,具体输出格式看案例 import java.util.*; import java.math.*; public class Main { public static voi ...
- POJ 1001 Exponentiation
题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...
- 1001. Exponentiation高精度运算总结
解题思路 这道题属于高精度乘法运算,要求输入一个实数R一个指数N,求实数R的N次方,由于R有5个数位,而N又特别大,因此用C++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...
- POJ 1001 Exponentiation 模拟小数幂
模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len #include <iostrea ...
- HOJ 2148&POJ 2680(DP递推,加大数运算)
Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...
随机推荐
- 如何将exe注册为windows服务,直接从后台运行
方法一:使用windows自带的命令sc 使用sc create 方法创建. 如:注册服务 sc create ResharperServices binpath= D:\ResharperServi ...
- HDU 1715 斐波那契数列1000项
二维数组模拟大数加法就可以了,不太难,直接上代码了. #include<stdio.h> #include<string.h> #include<math.h> # ...
- Java中有多个异常, 如何确定捕获顺序(多个catch),先从上到下执行,判断异常的大小,如果包含捕到异常,就进入这个catch,后面的就不再执行
Java中异常的捕获顺序(多个catch)( Java代码 import java.io.IOException; public class ExceptionTryCatchTest { publi ...
- Given d and e, factorize N to attack RSA
题目如下: RSA算法的使用一般要求每个不同的用户有一个独立的模数N.有天,Bob脑洞大开,认为似乎没有必要这样做.只需要一个模数N,然后给不同的用户分发不同的e和d就好了.可惜这种做法有严重的安全漏 ...
- js 垃圾回收机制和引起内存泄漏的操作
垃圾回收机制 JS中最常见的垃圾回收方式是标记清除. 工作原理:是当变量进入环境时,将这个变量标记为“进入环境”.当变量离开环境时,则将其标记为“离开环境”.标记“离开环境”的就回收内存. 工作流程: ...
- Python 列表复制
Python 列表复制 关于Python 列表的复制,有多种方法,常用的 有 赋值.切片.list.copy,copy.deepcopy等. 但是 实际用时 又有区别,不小心可能就用错了. 接下来 简 ...
- 零点红旗echarts
当月销量 当月同比 当月市场份额 区域占比 累计销量 累计同比 累计市场份额 区域占比 lists = { district:[ {name: '东北', value: [20100,'+13%',' ...
- 关于ORA-00979 不是 GROUP BY 表达式错误的解释
ORA-00979 不是 GROUP BY 表达式”这个错误,和我前面介绍的另外一个错误ORA-00937一样使很多初学oracle的人爱犯的. 我在介绍使用聚合函数中用group by来分组数据时特 ...
- Hisat2 bowtie2比对结果解读(Hisat2 Alignment summary)
RNA-seq数据的比对结果怎么解读?网上有很多人问,这里做一个大致的总结. Hisat2和bowtie2比对后产生的Alignment summary的格式是一样的,如下: Alignment su ...
- English Voice of <<City of stars>>
City of stars 星光之城啊 Are you shining just for me? 你是否只愿为我闪耀 City of stars 星光之城啊 There's so much that ...