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

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 */

{

...

}

Source

 
二. 题意
  • 给出字符串表示的浮点数 和 n次方数
  • 输出其n次方运算后的值
三. 分析
  • 算法核心:

    • 大数乘法:利用程序模拟算数运算过程,算出乘积
  • 实现细节:
    • 将输入数字从低位到高位反转存储,计算时方便进位
    • 模拟计算时,去除小数点,统一按照大整数相乘
    • 输出时逆序输出,同时计算小数点位置,相应位输出小数点
 
三. 题解
 #include <stdio.h>
#include <memory.h> #define MAXN 100
int a[MAXN], b[MAXN], len_a, len_b; /* 模拟算数运算过程,算出乘积 */
void multiply(int *a, int *b)
{
int i, j, len, c[MAXN]; memset(c, , sizeof(c)); for (i = ; a[i] != -; i++)
for (j = ; b[j] != -; j++)
c[i + j] += a[i] * b[j]; len = i + j - ; for (i = ; i < len; i++)
if (c[i] >= ) { c[i + ] += c[i] / ; c[i] = c[i] % ;} if (c[len] != ) len_b = len + ;
else len_b = len; for (i = ; i < len_b; i++) b[i] = c[i];
} void main()
{
char str[MAXN];
int i, j, exp;
int st, pt, ed; freopen( "input.txt", "r" , stdin); while (scanf("%s %d", str, &exp) != EOF) {
memset(a, -, sizeof(a));
memset(b, -, sizeof(b));
len_a = ;
st = pt = ed = -;
   
   /*
    1.st为输入数字的启始位置
    2.pt为输入数字小数点的位置
    3.ed为输入数字的结束位置
    4.此三个中间变量的作用:
      4.1 去掉开头和结尾的 0
      4.2 对于小数点的特殊处理
      4.3 用于计算出乘积后小数点的正确位置
*/
for (i = ; str[i] != '\0'; i++) {
len_a++; if (str[i] != '' && str[i] != '.' && st == -) st = i;
if (str[i] != '' && str[i] != '.' || (str[i] != '.' && pt == -)) ed = i;
if (str[i] == '.') pt = i;
} for (i = ed, j = ; i >= st; i--) {
if (str[i] == '.') continue; b[j] = a[j] = str[i] - '';
j++;
} len_b = len_a = j;
for(i = ; i < exp; i++) multiply(a, b); if (pt < st) {
printf(".");
for (i = ; i < (ed - pt) * exp - len_b; i++) printf("");
} for (i = len_b - ; i >= ; i--) {
if (pt > st && pt < ed && i == (ed - pt) * exp - ) printf(".");
printf("%d", b[i]);
} printf("\n");
}
}

[POJ] #1001# Exponentiation : 大数乘法的更多相关文章

  1. POJ 1001 Exponentiation(大数运算)

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

  2. [POJ 1001] Exponentiation C++解题报告 JAVA解题报告

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

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

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

  4. POJ 1001 Exponentiation

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

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

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

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

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

  7. POJ 1001 Exponentiation 模拟小数幂

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

  8. Project Euler 16 Power digit sum( 大数乘法 )

    题意: 215 = 32768,而32768的各位数字之和是 3 + 2 + 7 + 6 + 8 = 26. 21000的各位数字之和是多少? 思路:大数乘法,计算 210 × 100 可加速计算,每 ...

  9. 51nod 1027大数乘法

    题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...

随机推荐

  1. 1、Web容器的理解&Tomcat的安装与配置

    Web容器的理解 <Java Web开发实战经典——基础篇>一书中对Web容器这一概念阐述得很好,借用其观点对Web容器加以理解: 想要运行一个Java Web的程序,则必须有相应的Web ...

  2. VS2012 开发SharePoint 2013 声明式workflow action(activity)之 HelloWorld

    本文讲述VS2012 开发SharePoint 2013 声明式workflow action 之 HelloWorld. 使用VS2012开发客户化的workflow action是SharePoi ...

  3. iOSTab bar

    http://www.apkbus.com/android-130504-1-1.html #import #import "FirstViewController.h"#impo ...

  4. px,dp,sp单位转换工具类

    在layout中使用dp 在代码中getWidth系列得到的是px 设置字体大小时使用的是sp /** * Android大小单位转换工具类 */ public class PxDpSpUtil { ...

  5. C# Index 定义索---引具体使用

    using System;using System.Collections.Generic;namespace TestThisIndex{    public class Program    {  ...

  6. 【HDOJ】4801 Pocket Cube 的几种解法和优化

    1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...

  7. Web内容管理系统 Magnolia 安装使用-挖掘优良的架构(2)

    在Windows上安装社区版  tomcat集成版 Magnolia CMS社区版本为免费发行,不需要任何GNU通用公共许可协议(第3版)条款下的授权(这个许可协议允许您在特定条款和条件下,重新分配和 ...

  8. LinQ综合应用实例

    直接上代码,内容很浅显易懂,在这里就不做更多的解释,解释见代码注释. using System; using System.Collections.Generic; using System.Linq ...

  9. bzoj2326: [HNOI2011]数学作业

    矩阵快速幂,分1-9,10-99...看黄学长的代码理解...然而他直接把答案保存在最后一行(没有说明...好吧应该是我智障这都不知道... #include<cstdio> #inclu ...

  10. css3的背景多重运用

    效果图: 简单代码: http://www.developerdrive.com/2013/08/introducing-css3-multiple-backgrounds/ 演示地址: http:/ ...