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 //高精度小数 小数位数不受限制
随机推荐
- Gym Class(拓扑排序)
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方案总结
首先.这是一个极其简单的问题,大牛可忽略.新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比較困惑,用哪种方式能够安全有 ...
- Timer.3 - Binding arguments to a handler
In this tutorial we will modify the program from tutorial Timer.2 so that the timer fires once a sec ...
- 获取被选择的radio的值
function selectRadio() { var val = $('input:radio[name="address_select"]:checked').val(); ...
- zabbix PHP databases support off Fail
zabbix初始化检查安装环境不通过: PHP databases support off Fail --未找到所支持的数据库 处理方法:安装Mysqli模块 ############## ...
- C#几种截取字符串的方法小结 (摘抄)
1.根据单个分隔字符用split截取 例如 string st="GT123_1"; string[] sArray=st.split("_"); 即可得到sA ...
- JS中的函数节流
函数节流的目的 从字面上就可以理解,函数节流就是用来节流函数从而一定程度上优化性能的.例如,DOM 操作比起非DOM 交互需要更多的内存和CPU时间.连续尝试进行过多的DOM 相关操作可能会导致浏览器 ...
- Entity Framework中实现查询的几种方法
在介绍几种方法前,献上一张图,希望图的作者不要追究我的盗图之过.本文的内容是我自学时的笔记,自学的内容来自网络.手打的代码,切不可直接复制过去用,会有好多错别字什么的. Entity SQL 类似于S ...
- FullCalendar 的学习笔记(二)
下面是一个.NET webForm的具体列子 注意引用了artDialog 以及异步请求数据的json格式字符串 <html xmlns="http://www.w3.org/1999 ...
- 两个iframe联动刷新 JS代码
1.iframe代码: <iframe id="famUpload" src="report.asp?syear=<%=Year(now())%>&qu ...