[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; ; ; ; ...
随机推荐
- MyEclipse 2014 + JSP+ Servlet
来自:http://blog.csdn.net/21aspnet/article/details/21867241 1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下 ...
- Android Include标签
编程的世界有的时候很微妙,有的时候就好像是在解决一个哲学问题,Android开发的时候,所有的布局,颜色,等(其实这些都可以称之为资源,Android中的资源是指非代码部分,如图片.音频.视频.字符等 ...
- Python数字加千分符
1.最简单的内置format函数: >>> format(1234567890,',') '1,234,567,890' 2.正则表达式: import re def formatN ...
- c 语言练习__去掉多余的空白字符_修正
#include <stdio.h> #include <string.h> #include <errno.h> #define BUF_SIZE 128 /* ...
- WCF-学习笔记概述之计算服务(1)
关于WCF的介绍,在此不再赘述,其他地方应有尽有.直接开始实例,第一个实例以一个简单的计算服务为例,本人是学习了蒋金楠的<WCF全面解析>. 1.构建解决方案 Interface:用于定义 ...
- NDK(19)简单示例:ndk调用java基本方法、数组;使用stl、访问设备
一.ndk调用java类示例 1,调用基本方法 /* * Class: com_example_ndksample_MainActivity * Method: ndkFindJavaClass * ...
- NDK(14)Native的char*和Java的String相互转换
转自: http://www.cnblogs.com/canphp/archive/2012/11/13/2768937.html 首先确保C/C++源文件的字符编码是UTF-8与JAVA的class ...
- 1137. Bus Routes(dfs)
1137 做过一样的 怎么又忘了 再一次搜超时 不用回溯 #include <iostream> #include<cstdio> #include<cstring> ...
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...
- [POJ 3498] March of the Penguins
March of the Penguins Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 4378 Accepted: ...