一. 题目
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. Java文件解压之TGZ解压

    package com.alibaba.intl.batch.dependency; import java.io.File; import java.io.FileInputStream; impo ...

  2. 50. Pow(x, n)

    题目: Implement pow(x, n). 链接: http://leetcode.com/problems/powx-n/ 题解: 使用二分法求实数幂,假如不建立临时变量halfPow,直接r ...

  3. VS2015中的异常配置

    The New Exception Settings Window in Visual Studio 2015Managing Exceptions with the Debugger Underst ...

  4. 第六届华为创新杯编程大赛-进阶1第1轮 洞穴逃生 (bfs + 优先队列)

    这个题容易出错想了挺长时间,然后代码不长,1Y.. 做完题,看了一下别人的博客,也可以优先用 闪烁法术, 在闪烁法术不不如跑步的阶段(即魔法恢复的时候)用跑步. 洞穴逃生 描述: 精灵王子爱好冒险,在 ...

  5. java转换json需导入的jar包说明

    commons-beanutils-1.8.0.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBe ...

  6. int和integer;Math.round(11.5)和Math.round(-11.5)

    int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...

  7. bzoj1563

    P<=10一开始是吓死我了 后来想到这就是一个经典的决策单调性解决1d1d动态规划的题目 像决策单调性完全可以打表找规律,这里有一篇严谨的证明https://www.byvoid.com/blo ...

  8. bzoj2432

    被虐的体无完肤, 直接给题解地址吧:http://vfleaking.blog.163.com/blog/static/174807634201341721051604/ ; ..,..] of in ...

  9. UVa 12096 The SetStack Computer【STL】

    题意:给出一个空的栈,支持集合的操作,求每次操作后,栈顶集合的元素个数 从紫书给的例子 A={{},{{}}} B={{},{{{}}}} A是栈顶元素,A是一个集合,同时作为一个集合的A,它自身里面 ...

  10. OOD、OOP、AOP区别

    OOD:面向对象设计(Object-Oriented Design,OOD)方法是OO方法中一个中间过渡环节.其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受. OOP:面 ...