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 ...
随机推荐
- 10 Linux Commands Every Developer Should Know
转载:http://azer.bike/journal/10-linux-commands-every-developer-should-know/ As a software engineer, l ...
- CSS Backgrounds(背景)
CSS Backgrounds(背景) CSS 背景属性用于定义HTML元素的背景. CSS 属性定义背景效果: background-color background-image backgroun ...
- TCP/UDP 端口
端口说明 小于1024的端口通常运行一些网络服务 大于1024的端口用来与远程机器建立连接 TCP端口 = 回显 = 丢弃 = 在线用户 = 时间服务 = 网络状态 = 每日引用 = 消息发送 = 字 ...
- DATETIME与TIMESTAMP
DATETIME与TIMESTAMP都能表达一个完整的日期格式:YYYY-MM-DD HH:MM:SS[.fraction] eg: mysql> create table test(id in ...
- 20145335郝昊《java程序设计》第1次实验报告
2014535郝昊<java程序设计>实验1实验报告 实验名称 利用java语言实现凯撒密码,并运行测试. 实验内容 用java语言实现凯撒密码,凯撒密码是一种代替的移位密码,它将明文加密 ...
- LeetCode (226):Invert Binary Tree 递归实现
Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...
- Job流程:Mapper类分析
此文紧接Job流程:决定map个数的因素,Map任务被提交到Yarn后,被ApplicationMaster启动,任务的形式是YarnChild进程,在其中会执行MapTask的run()方法.无论是 ...
- vSphere SDK for Java - 从模板部署虚拟机并配置IP地址
vSphere for Java类库:vijava 虚拟机配置类 package com.vmware.vcenter_event.VirtualMachine; import com.vmwa ...
- ubuntu如何释放内存
答: step 1: 以最高权限同步所有的缓存到磁盘中 sync sync step2: 执行以下命令指示内核对内存进行调整 echo 3 > /proc/sys/vm/drop_caches ...
- asm-3.3.1.jar详解 (转)
Java字节码操纵框架.它可以直接以二进制形式动态地生成stub类或其他代理类,或者在装载时动态地修改类.ASM提供类似于BCEL和SERP之类的工具包的功能,但是被设计得更小巧.更快速,这使它适用于 ...