python小数乘法有误差_hdu 1063 Exponentiation (高精度小数乘法)

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

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

#include

#include

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

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

{

for(j = 0;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

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

s = mul(s,a);

print(s);

}

return 0;

}

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

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

hdu 1063 Exponentiation

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

hdu 1063 Exponentiation 大数

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

BigDecimal类(高精度小数)

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

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

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

hdu 5187 高速幂高速乘法

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

Javascript保证精度的小数乘法

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

HDU 3074&period;Multiply game-区间乘法-线段树&lpar;单点更新、区间查询&rpar;,上推标记取模

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

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

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

随机推荐

AntiXSS v4&period;0中Sanitizer&period;GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案

AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案 以下代码为asp.net环境下,c#语言编写的解决方案.数据用Dictiona ...

C&num; 控制台程序(命令行程序)设置字体颜色,窗口宽高,光标行数

控制台程序(命令行程序)设置窗口宽度高度,如下代码: Console.WriteLine(Console.WindowHeight); Console.WriteLine(Console.Buffer ...

HDU 1796 How many integers can you find (状态压缩 &plus; 容斥原理)

题目链接 题意 : 给你N,然后再给M个数,让你找小于N的并且能够整除M里的任意一个数的数有多少,0不算. 思路 :用了容斥原理 : ans = sum{ 整除一个的数 } - sum{ 整除两个的数 ...

Mayor&&num;39&semi;s posters&lpar;离散化线段树&rpar;

Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 54067   Accepted: 15713 ...

kafka分布式消息队列介绍以及集群安装

简介 首先简单说下对kafka的理解: 1.kafka是一个分布式的消息缓存系统: 2.kafka集群中的服务器节点都被称作broker 3.kafka的客户端分为:一是producer(消息生产者) ...

C&plus;&plus;参数传递&lpar;01&rpar;

*是取值运算符,对地址使用可以获得地址中储存的数值:对于指针a,*a表示取a中的值 &是地址运算符,对变量使用可以获得该变量的地址. 对于变量b,*b表示取b的地址 别名(引用):主要用于做函 ...

在Office Add-in中实现单点登陆(SSO)

作者:陈希章 发表于 2017年12月27日 这篇文章经过多次修改,终于在今天晚上写完了,演示用的范例代码也终于跑通了.因为这个SSO的功能目前只是Preview的状态,所以本篇文章严格参考了官方的文 ...

Leetcode解题-链表&lpar;2&period;2&period;2&rpar;ReverseLinkedList

题目:2.2.2 Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in on ...

DSAPI之摄像头追踪指定颜色物体

Private CAM As New DSAPI.摄像头_avicap32 Private Clr As Color = Color.FromArgb(230, 50, 50) Private _Lo ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值