[POJ] #1001# Exponentiation : 大数乘法
Time Limit: 500MS | Memory Limit: 10000K | |
Total Submissions: 156373 | Accepted: 38086 |
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
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
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
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 : 大数乘法的更多相关文章
- 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
题意:求c的n次幂……要求保留所有小数…… 解法:一开始只知道有BigInteger……java大数+模拟.第一次写java大数……各种报错各种exception……ORZ 没有前导0和小数后面的补位 ...
- poj 1001 Exponentiation 第一题 高精度 乘方 难度:1(非java)
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 138526 Accepted: 33859 ...
- POJ 1001 Exponentiation(JAVA,BigDecimal->String)
题目 计算实数a的n次方,具体输出格式看案例 import java.util.*; import java.math.*; public class Main { public static voi ...
- POJ 1001 Exponentiation 模拟小数幂
模拟小数幂 小数点位 pos 非零末位 e 长度 len 只有三种情况 pos > len pos < e e < pos < len #include <iostrea ...
- Project Euler 16 Power digit sum( 大数乘法 )
题意: 215 = 32768,而32768的各位数字之和是 3 + 2 + 7 + 6 + 8 = 26. 21000的各位数字之和是多少? 思路:大数乘法,计算 210 × 100 可加速计算,每 ...
- 51nod 1027大数乘法
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
随机推荐
- java工具类–自动将数据库表生成javabean
最近和数据库的表打交道挺多的,因为暂时做的是接口活. 在这过程中发现要把表转换成对应的javabean类型,字段少的表还行,如果不小心碰到几十个字段的他妈的写起来就有点麻烦了,万一碰到几百个的呢,那不 ...
- C# 使用AutoResetEvent进行线程同步
AutoResetEvent 允许线程通过发信号互相通信. 通常,当线程需要独占访问资源时使用该类. 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号. 如果 AutoRe ...
- linux 命令学习大全
转载 http://blog.csdn.net/xiaoguaihai/article/details/8705992/
- 23.allegro中自动布线[原创]
1. --- 方法①:选择网络自动布线 -- --- 已经步好: --- 方法②: ---- ---- 布线: --- 方法③: -- ----
- Android开发之onActivityResult()中的resultCode为0,intent为null的解决办法
BUG:昨天在使用activity之间传值的时候,遇到了一个bug,该bug为:Activity A启动Activity B,然后在Activity B中取到一个值,并通过back键返回到Activi ...
- 1934. Black Spot(spfa)
1934 水题 RE了N久 后来发现是无向图 #include <iostream> #include<cstring> #include<algorithm> # ...
- Android系统服务-WindowManager
WindowManager是Android中一个重要的服务 (Service ).WindowManager Service 是全局的,是唯一的.它将用户的操作,翻译成为指令,发送给呈现在界面上的 ...
- HDU 4948
题目大义: 给一张图,任意两点间有单向边,找出一种方案,使得每个新入队的点与队中的点距离<=2. 题解: 贪心,从最后入队点开始反向插入,每次找出最大入度的点入队. 只需证明最大入度点A与所有未 ...
- HTTPS通信机制
概述 使用HTTP协议进行通信时,由于传输的是明文所以很容易遭到窃听,就算是加密过的信息也容易在传输中遭受到篡改,因此需要在HTTP协议基础上添加加密处理,认证处理等,有了这些处理机制的HTTP成为H ...
- UVa 536 Tree Recovery
题意:给出一颗二叉树的前序遍历和中序遍历,输出其后序遍历 用杭电1710的代码改一点,就可以了. #include<iostream> #include<cstdio> #in ...