[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; ; ; ; ...
随机推荐
- AndroidRichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)
代码地址:https://github.com/Luction/AndroidRichText AndroidRichText帮助实现像QQ,微信一样的,一个TextView里既有文字又有表情又有图片 ...
- 6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)
单向多对一的关联关系 具体体现:n的一方有1的引用,1的一方没有n的集合属性 举个例子:订单Order对顾客Customer是一个单向多对一的关联关系.Order是n的一方,有对Customer的引用 ...
- c# 使用 静态类+xml序列化 保存配置文件
namespace TVCorrectionDataProcess{ [XmlRoot(ElementName = "Config")] public class Co ...
- WCF学习笔记之地址
1.统一资源标识(URI) URI全称是Uniform Resource Identifier(统一资源标识),唯一地标识一个网络资源的同时也标识资源所处的位置以及访问方式(资源访问所用的网络协议). ...
- 加密解密(11)HMAC-在sha1,md5基础上加密
HMAC: Hash-based Message Authentication Code http://baike.sogou.com/v10977193.htm http://www.baike.c ...
- 在XML里的XSD和DTD以及standalone的使用3----具体使用详解
本人亲自写的一个简单的测试例子 1.xsd定义 <?xml version="1.0" encoding="utf-8"?><xs:schem ...
- java实现DES算法
import java.util.UUID; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypt ...
- Android Configuration change引发的问题及解决方法(转)
之前在学习Fragment和总结Android异步操作的时候会在很多blog中看到对Configuration Change的讨论,以前做的项目都是固定竖屏的,所以对横竖屏切换以及横竖屏切换对程序有什 ...
- Oracle中常见的33个等待事件小结
在Oracle 10g中的等待事件有872个,11g中等待事件1116个. 我们可以通过v$event_name 视图来查看等待事件的相关信息 一. 等待事件的相关知识 1.1 等待事件主要可 ...
- MySql表中key的区别
我们看到Key那一栏,可能会有4种值,即'啥也没有','PRI','UNI','MUL'1. 如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列2. ...