poj1001(高精度)
| Time Limit: 500MS | Memory Limit: 10000K | |
| Total Submissions: 132438 | Accepted: 32334 |
Description
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
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
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
Hint
s is a string and n is an integer
C++
while(cin>>s>>n)
{
...
}
c
while(scanf("%s%d",s,&n)==2) //to see if the scanf read in as many items as you want
/*while(scanf(%s%d",s,&n)!=EOF) //this also work */
{
...
} 这题,最强大的是后台的测试数据,以至于让很多人没有AC,这题读了之后就会发现有几个关键点,一个是数据运算怎么处理,一个是做什么处理符合一些变态的数据,大数类的模拟手算。
首先说一下第一个,我们运算时候待着小数点计算式肯定不方便的,所以必须除去小数点,把数据当做整数计算完,然后再加上小数点,对于小数点位置的判断程序中说明。
第二个,题目中说了没意义的0不能输出,比如0.1 输出.1,比如100.10 输出100.1,我们运算可能会出现很多0,这就需要我们除去前导0,后缀零,判断数据是否大于1
第三个倒是最好解决的,数据以字符接收,存入整型数组,注意存的时候最好倒着存储,这样进位好进位一些,满十进一,输出倒着输出就OK了。
#include<stdio.h>
#include<string.h> int output[]; //第一位为1,方便计算
int m;
//num是去掉小数点后的十进制数字,比如95.23变为9523
//因为我们要乘的数是固定的,所以可以都去掉小数点计算,最后如果有小数点加上去就行了
void cal(char str[],int num)
{
int i;
for(i=;i<m;i++)
{
output[i]=output[i]*num; //因为最大的数可能为99999,99999*9不会超出int范围的,所以先乘好,然后再考虑进位
}
for(i=;i<m-;i++)
{
if(output[i]>=)
{
output[i+]+=output[i]/;
output[i]%=;
}
}
int t = output[m-];
int p=m-;
if(t>=) //把最后一个数字比如45,存储到字符数组中
{
while(t>)
{
output[p++]=t%;
t/=;
}
}
m=p;
return ;
} int main()
{
char str[];
int n;
while(scanf("%s%d",str,&n)!=EOF)
{ int sum = ,Pointsum=;
int length = strlen(str),i;
for(i = ; i<length;i++)
{
if(str[i]=='.')
{
Pointsum = (length-(i+))*n; //记录有多少位小数
}
else
{
sum = sum* + str[i]-''; //迭代增加求完整的十进制数
}
}
if(sum==)
{
printf("0\n");
continue;
}
memset(output,,sizeof(output));
output[]=;
m=;
for(i = ;i<n;i++)
cal(str,sum); int temp = ;
for(i = ; i<m;i++) //先去掉后缀零
{
if(output[i]!=)
{
temp = i; //第一位不为零的数字
break;
}
}
if(Pointsum-temp<=) //没有小数点
for(i =m-;i>=Pointsum;i--) //temp也是非零的
printf("%d",output[i]);
else //有小数点
{
if(Pointsum>m)
m=Pointsum;
for(i=m-;i>=Pointsum;i--)
printf("%d",output[i]);
printf(".");
for(;i>=temp;i--)
printf("%d",output[i]);
}
printf("\n"); }
return ;
}
poj1001(高精度)的更多相关文章
- 高精度POJ1001
今天看到这道题了 poj1001 题目地址是http://bailian.openjudge.cn/practice/1001/ 英文看得懂,可是算法不明白,所以转别人的文章,留着给学生看看:乔高建( ...
- POJ-1001 Exponentiation 高精度算法
题目链接:https://cn.vjudge.net/problem/POJ-1001 以前写过一个高精度乘法,但是没有小数点,实现起来也没什么难得, 现在把代码都般过来,等会把旧电脑弄一弄,暂时就不 ...
- C# 高精度求幂 poj1001
高精度求幂 public static char[] exponentiation(string a,int r) { ]; string b = ""; string c = a ...
- 求高精度幂(poj1001)
Description Problems involving the computation of exact values of very large magnitude and precision ...
- CSharpGL(28)得到高精度可定制字形贴图的极简方法
CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...
- 递推+高精度 UVA 10497 Sweet Child Makes Trouble(可爱的孩子惹麻烦)
题目链接 题意: n个物品全部乱序排列(都不在原来的位置)的方案数. 思路: dp[i]表示i个物品都乱序排序的方案数,所以状态转移方程.考虑i-1个物品乱序,放入第i个物品一定要和i-1个的其中一个 ...
- [Template]高精度模板
重新写一下高精度模板(不要问我为什么) 自认为代码风格比较漂亮(雾 如果有更好的写法欢迎赐教 封装结构体big B是压位用的进制,W是每位长度 size表示长度,d[]就是保存的数字,倒着保存,从1开 ...
- Code[VS] 3123 高精度练习之超大整数乘法
FFT 做 高精度乘法 #include <bits/stdc++.h> ); struct complex { double a, b; inline complex( , ) { a ...
- Java 高精度数字
BigInteger // 高精度整数 BigDecimal //高精度小数 小数位数不受限制
随机推荐
- grep命令实例
grep一般用于查找文件中含有某些字符串的行,其命名格式如下 grep [OPTIONS] PATTERN [FILE...] 下面例举grep在linux使用过程中其常用使用实例: 1.grep递归 ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅱ
2.4.2初级实现 我们知道,基础数据结构是实现优先队列的起点.我们可以是使用有序或无序的数组或链表.在队列较小时,大量使用两种主要操作之一时,或是所操作元素的顺序已知时,它们十分有用.因为这些实现相 ...
- mount命令汇总(转载)
(一)挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式: mount [-t vfstype] [-o op ...
- Python 协程(gevent)
协程,又叫微线程,协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此: 协程能保留上 ...
- xcode6和ios 8 百度无法定位解决
. @interface里: CLLocationManager *locationManager; . 初始化: locationManager = [[CLLocationManager allo ...
- ajaxFileUpload SyntaxError: syntax error
在使用ajaxFileUpload上传文件时,Chrome没问题,IE和Firefox出错,Firefox报SyntaxError: syntax error错误 JS代码例如以下: $.ajaxFi ...
- [转]Laravel 4之数据库操作
Laravel 4之数据库操作 http://dingjiannan.com/2013/laravel-database/ 数据库配置 Laravel数据库配置在app/config/database ...
- [Immutable.js] Differences between the Immutable.js Map() and List()
The Immutable.js Map() is analogous to a Javascript Object or Hash since it is comprised of key-valu ...
- 8. 冒泡法排序和快速排序(基于openCV)
一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分 ...
- Oracle11g x64使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine
原因oracle 11g中安装的Oracle SQL Developer是32位的,而我们现在给他指定的java.exe却是64位的,所以会出现这种错误.解决方法1)从网上下载Oracle SQL D ...