//大数继续,额,要吐了。

Problem Description
Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems. 



This problem requires that you write a program to compute the exact value of Rn where R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25. 
 
Input
The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.
 
Output
The output will consist of one line for each line of input giving the exact value of R^n. Leading zeros should be suppressed in the output. Insignificant trailing zeros must not be printed. Don't print the decimal point if the result is an integer.
 
Sample Input
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
 
Sample Output
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
 
Source
 

/********************

高精度数,模拟乘法,

*********************/

Code:

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
#define N 1000
struct Bint
{
int num[N]; //数值存储
int p;//整数位数
int del;//小数位数
int len;// 总的数位长度
};
int Find(char a,char str[])// 找小数点的位置,实际返回的是整数部分的位数
{
int i,len = strlen(str);
for(i = 0;i<len;i++)
if(str[i]==a)
return i;
return len;// 整数时直接返回 长度
} void print(struct Bint s)// 输出函数
{
int i;
/*
if(s.p=1&&s.num[s.len-1]==0)
s.p-=1;
*/
for(i = s.p+s.del-1;i>=s.del;i--)
printf("%d",s.num[i]);
if(s.del>0){
printf(".");
for(i = s.del-1;i>=0;i--)
printf("%d",s.num[i]);
}
printf("\n");
}
void trans(Bint &a,char str[])// 将输入的字符串形式的数 转换为结构体
{
memset(a.num,0,sizeof(a.num));
int len = strlen(str);
a.p = Find('.',str);
a.del = (len==a.p)?0:(len-a.p-1);// 如果包含小数点则小数位数为 数的长度-整数位数-1
int i=0,k = 0,pa= a.p,l = len-1;
while(str[i++]=='0'&&i<=pa)// 去除前导0 小数点前面的 0 也不需要保存
a.p--;
while(str[l--]=='0'&&l>=pa)// 去除 后导 0
a.del--;
for(i = pa+a.del;i>pa;i--)// 小数位 赋值
a.num[k++] = str[i]-'0';
for(i = pa-1;i>=pa-a.p;i--)
a.num[k++] = str[i]-'0';
a.len = k;
}
Bint mul(Bint a,Bint b)// 模拟乘法,值存到结构体中
{
Bint m;
memset(m.num,0,sizeof(m.num));
int i,j;
for(i = 0;i<a.len;i++)
{
for(j = 0;j<b.len;j++)
{
m.num[i+j]+=a.num[i]*b.num[j];
}
}
m.del = a.del+b.del;
m.len = a.len+b.len-1;
for(i = 0;i<m.len;i++)
if(m.num[i]>=10)
{
m.num[i+1] += m.num[i]/10;
m.num[i]%=10;
}
if(m.num[m.len]>0&&m.num[m.len]<10)
m.len+=1;
else if(m.num[m.len]>10)
{
m.num[m.len+1]+=m.num[m.len]/10;
m.num[m.len]%=10;
m.len+=2;
}
m.p = m.len-m.del;
return m;
}
int main()
{
char str[N];
Bint a,s;
int n,i;
while(scanf("%s%d",str,&n)!=EOF)
{
trans(a,str);
trans(s,str);
for(i = 1;i<n;i++)
s = mul(s,a);
print(s); }
return 0;
}

hdu 1063 Exponentiation (高精度小数乘法)的更多相关文章

  1. uva748 - Exponentiation 高精度小数的幂运算

    uva748 - Exponentiation   Exponentiation  Problems involving the computation of exact values of very ...

  2. hdu 1063 Exponentiation

    求实数的幂,这个用C++写的话有点长,但是用Java写就非常方便了…… );            System.out.println(an);        }    }}

  3. hdu 1063 Exponentiation 大数

    Problem Description Problems involving the computation of exact values of very large magnitude and p ...

  4. BigDecimal类(高精度小数)

    位置:java.math.BigDecimal 作用:提供高精度小数数据类型及相关操作 一.基本介绍 BigDecimal为不可变的.任意精度的有符号十进制数,其值为(unscaledValue * ...

  5. 程序设计入门——C语言 第5周编程练习 1高精度小数(10分)

    1 高精度小数(10分) 题目内容: 由于计算机内部表达方式的限制,浮点运算都有精度问题,为了得到高精度的计算结果,就需要自己设计实现方法. (0,1)之间的任何浮点数都可以表达为两个正整数的商,为了 ...

  6. hdu 5187 高速幂高速乘法

    http://acm.hdu.edu.cn/showproblem.php?pid=5187 Problem Description As one of the most powerful brush ...

  7. Javascript保证精度的小数乘法

    众所周知,js的小数乘法很容易丢失精度,这是一件很恶心的事情.所以我写了这个方法,保证计算精度./** * js小数乘法 *@parameter arg1:被乘数(接受小数和整数) *@paramet ...

  8. HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. Java中的高精度整数和高精度小数

    在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差: 在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误 ...

随机推荐

  1. How good software makes us stupid?

    How good software makes us stupid? 科技是怎样让人变傻的? People assume that iPhones, laptops and Netflix are e ...

  2. 基于EF创建数据库迁移

    通过创建的实体类和DbContext类利用EF的Code First数据库迁移创建数据库. 下面看代码. 一.先创建实体类 我先添加一个BaseEntity,里面就一个属性 [Key] public ...

  3. thinPHP中多维数组的遍历

    $drug=array(    'ACEI'=>array(array('ch_name'=>'卡托普利','en_name'=>'captopril'),array('ch_nam ...

  4. HDU 5433 Xiao Ming climbing dp

    Xiao Ming climbing Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/ ...

  5. Centos6 源代码部署MySQL5.6

    mysql从5.5版本号開始,不再使用./configure编译,而是使用cmake编译器,详细的cmake编译參数能够參考mysql官网文档(※ 很重要) http://dev.mysql.com/ ...

  6. c# label的内容显示不全

    c# label的内容显示不全.须要设置例如以下属性就可以: 1.将Lable的font属性的字体改成宋体: 2.将AutoSize属性改成true: 然后内容就能够显示所有了.

  7. VC6.0设置选项解读(转)

    其实软件调试还是一个技术熟练过程,得慢慢自己总结,可以去搜索引擎查找一些相关的文章看看,下边是一篇关于VC6使用的小文章,贴出来大家看看: 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解 ...

  8. 面试题总结之Linux/Shell

    Linux Linux cshrc文件作用 Linux如何起进程/查看进程/杀进程 Linux 文件755 代表什么权限 Linux辅助线程 Linux进程间通信方法 pipeline,msgq... ...

  9. Simulate android behaviors on win32

    To make debugging android games on win32 more convenience, we added some simulate actions to win32 p ...

  10. Android 自定义View修炼-自定义加载进度动画XCLoadingImageView

    一.概述 本自定义View,是加载进度动画的自定义View,继承于ImageView来实现,主要实现蒙层加载进度的加载进度效果. 支持水平左右加载和垂直上下加载四个方向,同时也支持自定义蒙层进度颜色. ...