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

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. mybatis 打印sql log配置

    mybatis 打印sql log, 方便调试.如何配置呢? log4j.xml : <!-- 打印sql start --> <appender name="IBatis ...

  2. asp.net中application,cookies,stateview,session的使用

    Cookie Cookie的用法也和ASP中差不多.比如我们建立一个名为aspcn,值为飞刀的cookie HttpCookie cookie = new HttpCookie["aspcn ...

  3. linux下eclipse的安装

    Eclipse的安装http://java.sun.com/javace/downloads/index.jsp下载:Jdk-6u17-linux-i586.binhttp://www.eclipse ...

  4. C#-设置窗体在显示器居中显示

    在窗体的属性中查看:StartPosition属性,该属性的设置中有一个"CenterScreen"的选择项,该项就是设置窗体局中显示的.

  5. 重启PHP命令

    php-fpm重启 killall php-fpm 再执行(usr/local/php是php的安装目录)/usr/local/php/sbin/php-fpm & /usr/local/ng ...

  6. HOG特征-理解篇

    网上去找关于HOG的资料,发现理解性的较少,并且较为冗长,为方便大家理解便自己写了篇,希望能对奋斗在特征提取第一线的同志们有所帮助: HOG即histogram of oriented gradien ...

  7. Android ListView快速定位(一)

    方法一: SectionIndexer接口 + 索引列表 参考:http://www.apkbus.com/android-69999-1-1.html 所谓section 就是一组有共性的item, ...

  8. IntelliTrace 调试、定位异常

    最近看了一个开源数据库管理,然后没有认真看它的配置环境,想看看是什么东西, 然后发现有类型转换的错误,但是一下子也定位不到哪里出错? 所以对于这种一下子找不到异常在哪里的,可以使用intellitra ...

  9. windows身份验证模式和SQL server身份验证模式 有什么不同

    两个验证方式是有明显不同的. 主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证 ...

  10. 给iOS 模拟器“安装”app文件

    前言 刚刚接触iOS的时候,我就一直很好奇,模拟器上面能不能直接安装app呢?如果可以,我们就直接在模拟器上面聊QQ和微信了.直到昨天和朋友们聊到了这个话题,没有想到还真的可以给模拟器“安装”app! ...