POJ-1001 Exponentiation 高精度算法
题目链接:https://cn.vjudge.net/problem/POJ-1001
以前写过一个高精度乘法,但是没有小数点,实现起来也没什么难得,
现在把代码都般过来,等会把旧电脑弄一弄,暂时就不写题解了
代码
#include <cstdio>
#include <cstring>
struct BigInteger{
int dot, size;
char num[600];
BigInteger(int size=0, int dot=0):size(size),dot(dot) {
for (int i=0; i<600; i++) num[i]=0;
}
BigInteger(const char str[]):size(0),dot(0) {
for (int i=0; i<600; i++) num[i]=0;
int len=strlen(str);
for (int i=len-1; i>=0; i--)
if (str[i]=='0') len--;
else break;
for (int i=len-1; i>=0; i--){
if (str[i]=='.') dot=len-i-1;
else num[size++]=str[i]-'0';
}
}
BigInteger operator * (const BigInteger &a) const{
BigInteger ans(size+a.size, dot+a.dot);
for (int i=0; i<size; i++){
for (int j=0; j<a.size; j++){
int tmp=num[i]*a.num[j], low=(tmp+ans.num[i+j])%10,
high=(tmp+ans.num[i+j])/10+ans.num[i+j+1];
ans.num[i+j]=low;
ans.num[i+j+1]=high;
}
}
while (ans.num[ans.size-1]==0) ans.size--;
return ans;
}
BigInteger operator ^ (const int n) const{
BigInteger ans("1"), tmp;
memcpy(&tmp, this, sizeof(*this));
for (int i=1; ; ){
if (n&i) ans=ans*tmp;
if ((i<<=1)<=n) tmp=tmp*tmp;
else break;
}
return ans;
}
void show(void){
if (dot>size-1){
printf(".");
for (int i=0; i<dot-size; i++) printf("0");
dot=0;
}
for (int i=size-1; i>=0; i--){
printf("%d", num[i]);
if (dot && i==dot) printf(".");
}printf("\n");
}
};
int main(void){
char inpt[600]; int n;
while (scanf("%s%d", inpt, &n)==2){
BigInteger a(inpt);
(a^n).show();
}
return 0;
}
| Time | Memory | Length | Lang | Submitted |
|---|---|---|---|---|
| None | 352kB | 1436 | G++ | 2018-01-20 15:27:27 |
POJ-1001 Exponentiation 高精度算法的更多相关文章
- POJ 1001 Exponentiation(大数运算)
POJ 1001 Exponentiation 时限:500 ms 内存限制:10000 K 提交材料共计: 179923 接受: 43369 描述:求得数R( 0.0 < R < ...
- [POJ 1001] Exponentiation C++解题报告 JAVA解题报告
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30 ...
- poj 1001 Exponentiation 第一题 高精度 乘方 难度:1(非java)
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 138526 Accepted: 33859 ...
- POJ 1001 Exponentiation 无限大数的指数乘法 题解
POJ做的非常好,本题就是要求一个无限位大的指数乘法结果. 要求基础:无限大数位相乘 额外要求:处理特殊情况的能力 -- 关键是考这个能力了. 所以本题的用例特别重要,再聪明的人也会疏忽某些用例的. ...
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- POJ 1001 Exponentiation(JAVA,BigDecimal->String)
题目 计算实数a的n次方,具体输出格式看案例 import java.util.*; import java.math.*; public class Main { public static voi ...
- 1001. Exponentiation高精度运算总结
解题思路 这道题属于高精度乘法运算,要求输入一个实数R一个指数N,求实数R的N次方,由于R有5个数位,而N又特别大,因此用C++自带的数据类型放不下. 解题思路是通过数组储存每次乘积结果和底数的每一位 ...
- poj 1001 求高精度幂(Java, BigDecimal, pow, hasNext, stripTrailingZeros, toPlainString)
求高精度幂 Time Limit: 500MS Memory Limit: 10000K Total Submissions: 180325 Accepted: 43460 Descripti ...
- POJ 1001 Exponentiation
题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...
随机推荐
- iframe 高度宽度自适应
<iframe id="iframeHome" name="iframeHome" src="/Page/NewHome/GongZuoTai. ...
- WPF XAML
xmlns 在xml中专门用于声明名字控件, xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 是 ...
- 如何解决bib的一些问题
胡老师留的大作业要求综述,因而有很多文献引用.但是当使用bibtex的方法,特别是中文文献的引用会遇到一些问题. 网上相关的解答有: http://blog.sciencenet.cn/blog-10 ...
- 阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;
上传到服务器后javamail发邮件异常 链接 原来是ECS基于安全考虑,禁用了端口25. 改成465就可以发邮件了. p.setProperty("mail.smtp.socketFact ...
- hiho 1613 - 墨水滴 - bfs+优先队列 *
题目链接 小Ho有一张白纸,上面有NxN个格子.小Ho可以选择一个格子(X, Y),在上面滴一滴墨水.如果这滴墨水的颜色深度是G,那么这个格子也会被染成深度为G的格子.同时周围的格子也会被这滴墨水浸染 ...
- WCF客户端获取服务端异常[自定义异常]
引言 经过不断的摸索,询问/调试,终于学会了关于WCF客户端与服务端之间异常的处理机制,在此来记录自己的成果,用于记录与分享给需要的伙伴们. 首先感谢[.NET技术群]里群主[轩]的大力帮助,如有需要 ...
- [NOIP2012提高组]疫情控制
题目:洛谷P1084.codevs1218.Vijos P1783. 题目大意:有一棵n个节点的,根为1的带权树和m支军队.每支军队可以在一个点上停下,那么从1开始就不能经过这个点了.现在有m支军队已 ...
- HDU 3046 Pleasant sheep and big big wolf
Pleasant sheep and big big wolf Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged ...
- Unix发展史
简述 了解过去,我们才能知其然,更知所以然.总结过去,我们才会知道明天该何去何从.在时间的滚轮中,许许多多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道.流传 ...
- hdu 1978 记忆化搜索
注意: dp[i][j] 表示(i,j)这个点有多少种方式 mark[i][j]表示这个点是否走过 假设有直接返回dp[i][j] dp的求法为全部梦走到点的dp的和 注意mark ...