hdu 1063 Exponentiation (高精度小数乘法)
//大数继续,额,要吐了。
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.
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
/********************
高精度数,模拟乘法,
*********************/
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 (高精度小数乘法)的更多相关文章
- 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.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模
Multiply game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- Java中的高精度整数和高精度小数
在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差: 在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误 ...
随机推荐
- getJSON的用法
一.方法定义:jQuery.getJSON( url, data, callback ) 通过get请求得到json数据 ·url用于提供json数据的地址页 ·data(Optional)用于传送到 ...
- tomcat的几种部署方法
原文:http://blog.163.com/pg_roger/blog/static/185884389201172921211937/ 1.将应用文件夹或war文件(均指编译好的文件)塞到tomc ...
- 5.6 太多分区引起OOM
一个月之前,Scott和同事们发现公司有一个MySQL MHA集群的master(假设master机器名为hostA)每隔一周左右就会挂一次(指MySQL挂掉),在几周内,MHA来回切了好几次. 按照 ...
- memcached client --ref
Clients Client API's / libraries Updated Jul 14, 2012 by dorma...@rydia.net ref:https://code.google. ...
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
使用Http的Post方式与网络交互通信.Post方式需要向网络传输一部分数据,同时具有输入流和输出流. 详见:Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例 ...
- iOS开发中图片方向的获取与更改
iOS开发中 再用到照片的时候 或多或少遇到过这样的问题 就是我想用的照片有横着拍的有竖着排的 所以导致我选取图片后的效果也横七竖八的 显示效果不好 比如: 图中红圈选中的图片选取的是横着拍 ...
- mfc非模态对话框
按照我们的之前的做法,先新建工程. 把基本的内容都添加上. 形成这样一个样子: 并且进行试运行,让程序能够完成加法运算. 值的注意的是,静态文本那里要改一下名字,否则无法将成员变量进行添加. 前期准备 ...
- mysql:通用查询日志general_log
1.通用查询日志:记录建立的客户端连接和执行的语句,通用查询日志默认情况下不是开启的,通用查询日志是以文本方式存放的 当需要采样分析的时候手工开启: SET Global general_log=1; ...
- scala学习笔记:理解lazy值
scala> var counter = 0 counter: Int = 0 scala> def foo = {counter += 1; counter} foo: Int scal ...
- 第一章 认识jQuery
jQuery是一个优秀的JavaScript库,它凭借简洁地语法和跨平台的兼容性,极大地简化了开发人员遍历HTML文档,操作DOM,处理事件,执行动画和开发Ajax操作. jQuery优势:1.轻量级 ...