Exponentiation
Time Limit: 500MS   Memory Limit: 10000K
Total Submissions: 126980   Accepted: 30980

Description

Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems.

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

The
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

The
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

If you don't know how to determine wheather encounted the end of input:
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 */

{

...

} 翻译:
求高精度幂
Time Limit: 500MS   Memory Limit: 10000K
Total Submissions: 126980   Accepted: 30980

Description

对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。

现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <= 25。

Input

T输入包括多组 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。

Output

对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。
 

解决思路

这是一道高精度的题,主要是处理前导0和末尾0的时候有点麻烦。例如100.00可能会处理成1。

源码

C++解题

   /*
poj 1001
version:1.0
author:Knight
Email:S.Knight.Work@gmail.com
*/ #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<memory.h>
using namespace std; char Result[];//存R^N的结果 //大实数的乘法,乘数为FirMultiplier和SecMultiplier,结果存在Result中
void HigRealMul(char* FirMultiplier, char* SecMultiplier, char* Result);
//剔除实数尾部的无效0或小数点
void CutInsignificantTail(char* StrR);
//计算小数点在实数中的位数
int CountPointIndex(char* StrR);
//删除实数中的小数点,PointIndex为小数点在实数中从右向左数的第几位
void DeletePoint(char* StrR, int PointIndex); int main(void)
{
char StrR[];//R对应的字符串
int N;
int i;
int PointIndex = ;//记录小数点在实数中从右向左数的第几位,如1.26在第3位,4在第0位 while(scanf("%s%d", StrR, &N) != EOF)
{
memset(Result, , ); CutInsignificantTail(StrR); PointIndex = CountPointIndex(StrR); DeletePoint(StrR, PointIndex); strcpy(Result, StrR); for (i=; i<=N; i++)
{
HigRealMul(Result, StrR, Result);
} int Len = strlen(Result); if (Len -(PointIndex - ) * N < )
{
printf(".");
for (i = Len - (PointIndex - ) * N; i<; i++)
{
printf("");
}
} for (i=; i<Len; i++)
{
//输出小数点
if (i == Len -(PointIndex - ) * N)
{
printf(".");
}
printf("%c", Result[i]);
}
printf("\n");
//printf("%s\n", Result);
//printf("%d\n", PointIndex);
}
return ;
} //大实数的乘法,乘数为FirMultiplier和SecMultiplier,结果存在Result中
void HigRealMul(char* FirMultiplier, char* SecMultiplier, char* Result)
{ char TmpResult[];
int i,j;
int k = -;//控制TmpResult[]下标
int FirLen = strlen(FirMultiplier);
int SecLen = strlen(SecMultiplier); memset(TmpResult, '', ); //模拟乘法运算
for (i=SecLen-; i>=; i--)
{
k++; int FirMul;
int SecMul = SecMultiplier[i] - '';
int Carry;//进位 for (j=FirLen-; j>=; j--)
{
FirMul = FirMultiplier[j] - '';
TmpResult[k + FirLen - - j] += FirMul * SecMul % ;
Carry = FirMul * SecMul / + (TmpResult[k + FirLen - - j] - '') / ;
TmpResult[k + FirLen - - j] = (TmpResult[k + FirLen - - j] - '') % + '';
TmpResult[k + FirLen - j] += Carry;
}
} //防止某一位的值超过9
for (k=; k<; k++)
{
TmpResult[k + ] += (TmpResult[k] - '') / ;
TmpResult[k] = (TmpResult[k] - '') % + '';
}
//将设置字符串结束符
for (k=; k>=; k--)
{
if ('' != TmpResult[k - ])
{
TmpResult[k] = '\0';
break;
}
} //将临时存储的答案TmpResult倒转变成我们熟悉的方式,存到Result中
for (i=strlen(TmpResult)-,j=; i>=; i--,j++)
{
Result[j] = TmpResult[i];
}
Result[j] = '\0'; } //剔除实数尾部的无效0或小数点
void CutInsignificantTail(char* StrR)
{
int i;
int PointIndex = CountPointIndex(StrR);
int Len = strlen(StrR); if ( == PointIndex)
{
if ('.' == StrR[Len - ])
{
StrR[Len - ] = '\0';
} return;
} for (i=Len-; i>Len--PointIndex; i--)
{
if ('' == StrR[i] || '.' == StrR[i])
{
StrR[i] = '\0';
}
else
{
return ;
}
}
} //计算小数点在实数中的位数
int CountPointIndex(char* StrR)
{
int i;
int Index = ; for (i = strlen(StrR); i>=; i--)
{ if ('.' == StrR[i])
{
break;
}
else
{
Index++;
}
} if (- == i)
{
Index = ;
} return Index; } //删除实数中的小数点
void DeletePoint(char* StrR, int PointIndex)
{
int i;
int Len = strlen(StrR); for (i=strlen(StrR)-PointIndex; i<Len; i++)
{
StrR[i] = StrR[i+];
}
}

JAVA解题:

 import java.io.*;
import java.util.*;
import java.math.*; public class Main1001 { /**
* @param args
*/
public static void main(String[] args) {
Scanner cinScanner = new Scanner(System.in); while (cinScanner.hasNextBigDecimal()) {
BigDecimal r = cinScanner.nextBigDecimal();
int n = cinScanner.nextInt(); BigDecimal answerBigDecimal = r.pow(n);
/*
* stripTrailingZero();去除小数后边的0,例如16.000000使用这个方法后,就变成了16
*/
answerBigDecimal = answerBigDecimal.stripTrailingZeros(); /*
* toPlainString();不使用科学计数法输出
*/
String answerString = answerBigDecimal.toPlainString();
if (answerString.startsWith("0.")) {
answerString = answerString.substring(1);
} System.out.println(answerString);
} } }
 

[POJ 1001] Exponentiation C++解题报告 JAVA解题报告的更多相关文章

  1. POJ 1001 Exponentiation(大数运算)

    POJ 1001 Exponentiation 时限:500 ms   内存限制:10000 K 提交材料共计: 179923   接受: 43369 描述:求得数R( 0.0 < R < ...

  2. [POJ 1000] A+B Problem 经典水题 C++解题报告 JAVA解题报告

        A+B Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 311263   Accepted: 1713 ...

  3. POJ 1001 Exponentiation(JAVA,BigDecimal->String)

    题目 计算实数a的n次方,具体输出格式看案例 import java.util.*; import java.math.*; public class Main { public static voi ...

  4. poj 1001 Exponentiation 第一题 高精度 乘方 难度:1(非java)

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 138526   Accepted: 33859 ...

  5. POJ 1001 Exponentiation 无限大数的指数乘法 题解

    POJ做的非常好,本题就是要求一个无限位大的指数乘法结果. 要求基础:无限大数位相乘 额外要求:处理特殊情况的能力 -- 关键是考这个能力了. 所以本题的用例特别重要,再聪明的人也会疏忽某些用例的. ...

  6. [POJ] #1001# Exponentiation : 大数乘法

    一. 题目 Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 156373   Accepted: ...

  7. POJ 1001 Exponentiation

    题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...

  8. POJ 1001 Exponentiation 模拟小数幂

    模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len #include <iostrea ...

  9. 【LeetCode】383. Ransom Note 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...

随机推荐

  1. (笔记)快速入门PADS logic 到 layout

    以前从未接触过画板,先是硬着头皮边学边操作<Layout2007中文教程之PADS_Logic>,刚好在中秋节前把这个教程从头到尾通学了一遍,随后感觉这个教程有了方方面面但没有工程的系统性 ...

  2. SQL Server数据库log shipping 灾备(Part1 )

    1.概述 Log Shipping为SQL Server提供的数据库备份过程.它可以将数据库整个复制到另一台服务器上.在这种情况下,交易日志也会定期发送到备份服务器上供恢复数据使用,这使得服务器一直处 ...

  3. SharePoint 2013 安装配置(3-1)

    在第二部分中,我向您展示了如何在Windows Server 2012 R2 for SharePoint 2013上设置Active Directory域服务.现在我们应该能够在Active Dir ...

  4. python3操作mysql数据库表01(基本操作)

    #!/usr/bin/env python# -*- coding:UTF-8 -*- import requestsfrom bs4 import BeautifulSoupfrom bs4 imp ...

  5. jmeter参考网址

    http://blog.csdn.net/dongdong9223/article/details/49248979 http://blog.csdn.net/hjh00/article/detail ...

  6. mininet安装,使用

    http://mininet.org/download/ http://sdnhub.cn/index.php/mininet-walkthrough-chinese/ --------------- ...

  7. Linux 的数字权限意义

    三个组 每个都有三个权限 r w x每个权限用二进制 0 和 1 标示 1即为有此权限 0 标示无权限  ower    group  other  r w x    r w x  r w x 每个组 ...

  8. 2018.4.16 Java多线程实现龟兔赛跑

    龟兔赛跑(通过多线程来实现 里面的具体方法) TT.java package com.lanqiao.demo3; /** * 乌龟 * @author Administrator * */ publ ...

  9. javaweb基础(9)_Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  10. Luogu [P3951] 小凯的疑惑

    题目详见:[P3951]小凯的疑惑 首先说明:此题为一道提高组的题.但其实代码并没有提高组的水平.主要考的是我们的推断能力,以及看到题后的分析能力. 分析如下: 证明当k>ab-a-b时,小凯可 ...