poj 1001 Exponentiation 第一题 高精度 乘方 难度:1(非java)
| Time Limit: 500MS | Memory Limit: 10000K | |
| Total Submissions: 138526 | Accepted: 33859 |
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
Output
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 */
{
...
}
遥远时代的第一道题,真是怀念啊,才学C语言的我明白了高精的意义
#include<iostream>
#include <string>
using namespace std;
string multiply(string a,string d){
int remain=0,temp=0;
string ad,mul="0";
for(int i=a.length()-1;i>=0;i--){
remain=0;//余数
ad="";//每次的乘积
for(int j=d.length()-1;j>=0;j--){
temp=(a[i]&15)*(d[j]&15)+remain;
remain=temp/10;
temp%=10;
ad=(char)(temp+'0')+ad;
}
if(remain){
ad=(char)(remain+'0')+ad;
}
int x=ad.length()-1;
int y=mul.length()-(a.length()-i);
remain=0;
while(x>=0&&y>=0){//完成加和
temp=(ad[x]&15)+(mul[y]&15)+remain;
remain=temp/10;
temp%=10;
mul[y]=temp+'0';
x--;y--;
}
while(x>=0){//如果ad串更长
temp=(ad[x]&15)+remain;
remain=temp/10;
temp%=10;
mul=(char)(temp+'0')+mul;
x--;
}
while(y>=0){//如果mul串更长
temp=(mul[y]&15)+remain;
remain=temp/10;
temp%=10;
mul[y]=temp+mul[y];
y--;
}
if(remain){//如果还有余数
mul=(char)(remain+'0')+mul;
}
}
return mul;
}
int main(){
string a,d;
int n;
while(cin>>a>>n){
int pos =a.find_first_of('.');//寻找小数点位置
a.erase(pos,1);
int num=(a.length()-pos)*n;
d=a;
for(int i=1;i<n;i++){
d=multiply(d,a);
}
if(pos==a.npos){//如果没有找到,a是整数,运算不会出现点,可以直接输出
for(int i=0;i<d.length()-1;i++){
if(d[0]!='0'){break;}
d.erase(0,1);
}
cout<<d<<endl;
continue;
}
d.insert(d.length()-num,".");
for(int i=0;i<d.length();i++){//去除前导零
if(d[0]!='0')break;
d.erase(0,1);
}
for(int i=d.length()-1;i>=0;i--){//去除后置零
if(d[i]!='0')break;
d.erase(i,1);
}
if(d[d.length()-1]=='.'){//没有小数部分就不用输出.
d.erase(d.length()-1,1);
}
cout<<d<<endl;
}
return 0;
}
poj 1001 Exponentiation 第一题 高精度 乘方 难度:1(非java)的更多相关文章
- POJ 1001 Exponentiation(大数运算)
POJ 1001 Exponentiation 时限:500 ms 内存限制:10000 K 提交材料共计: 179923 接受: 43369 描述:求得数R( 0.0 < R < ...
- [POJ 1001] Exponentiation C++解题报告 JAVA解题报告
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30 ...
- POJ 1001 Exponentiation 无限大数的指数乘法 题解
POJ做的非常好,本题就是要求一个无限位大的指数乘法结果. 要求基础:无限大数位相乘 额外要求:处理特殊情况的能力 -- 关键是考这个能力了. 所以本题的用例特别重要,再聪明的人也会疏忽某些用例的. ...
- POJ 1001 Exponentiation(JAVA,BigDecimal->String)
题目 计算实数a的n次方,具体输出格式看案例 import java.util.*; import java.math.*; public class Main { public static voi ...
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- POJ 1001 Exponentiation
题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...
- POJ 1001 Exponentiation 模拟小数幂
模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len #include <iostrea ...
- POJ 1293 网络流 第一题
完全的模板,做多了就好了吧 反向流量真的很有意思,有这样一种说法比较容易理解.”正向是+,反向就是-,其实是等价的.因为每次找到的增广路不一定是最优解里面的,所以再进行后面的操作的时候要重新选择,而反 ...
- 快速切题 sgu 111.Very simple problem 大数 开平方 难度:0 非java:1
111.Very simple problem time limit per test: 0.5 sec. memory limit per test: 4096 KB You are given n ...
随机推荐
- PHP 日期格式中 Y与y
大写Y效果: $nowtime = time(); $nowtime=date("Y-m-d",$nowtime); 结果: 2015-10-24 小写y效果: $nowtime ...
- live555笔记_hi3516A
1.简介 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SI ...
- windows使用Pandoc将Markdown转换为PDF文件
pandoc下载:https://github.com/jgm/pandoc/releases/tag/1.19.2.1 //windows下载msi文件 miktex下载:https://mikte ...
- Java ArrayList在foreach中remove的问题分析
目录 iterator itr.hasNext 和 itr.next 实现 倒数第二个元素的特殊 如何避坑 都说ArrayList在用foreach循环的时候,不能add元素,也不能remove元素, ...
- mybatis的一级缓存和二级缓存(1)
1.mybatis一级缓存,sqlSesion级别的缓存,一级缓存默认一直开启的,sqlSession级别的一个Map,把查询的数据放到一个Map中,以后需要相同的数据,直接从Map中去取 与数据库一 ...
- Editor.md的安装使用(MarkDown)
1.官网下载:http://pandao.github.io/editor.md/ 2.使用例子: <!DOCTYPE html> <html lang="zh-cn&qu ...
- c# 过滤HTML代码 源代码,案例 下载
#region 过滤HTML代码 //替换掉html字符,只显示文字信息. public string replaceHtmlCode(string Htmlstring) { Htmlstring ...
- close与shutdown系统调用
使用多线程时,pthread_create的参数flag有CLONE_FILES, 最终调用do_fork(),并且会根据CLONE_FILES标志来调用copy_files()来共享父进程中的文件描 ...
- Pandas 的使用
1. 访问df结构中某条记录使用loc或者iloc属性.loc是按照index或者columns的具体值,iloc是按照其序值.访问类似于ndarray的访问,用序列分别表示一维和二维的位置. 例如: ...
- js实现全选checkbox
js代码 function selectAllCheckBox(parentid) { var PID = document.getElementById(parentid); var cb = PI ...