POJ1001(C++处理大数)
2016-07-07 16:41
483 查看
Exponentiation
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
Sample Output
Time Limit: 500MS | Memory Limit: 10000K | |
Total Submissions: 158025 | Accepted: 38470 |
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
#include <cstdio> #include <cstring> using namespace std; const int MAXN=105; struct BigInt{ int e[MAXN],len,pp; BigInt() { memset(e,0,sizeof(e)); len=0; pp=0; } void set(const char s[]) { int l=strlen(s); for(int i=0;i<l;i++) { if(s[i]=='.') { pp=l-i-1; continue; } e[len++]=s[i]-'0'; } for(int i=0;i<len/2;i++) { int t=e[i]; e[i]=e[len-i-1]; e[len-i-1]=t; } while(len>1&&e[len-1]==0) len--; } BigInt operator*(const BigInt &b) { BigInt ret; for(int i=0;i<len;i++) { int up=0; for(int j=0;j<b.len;j++) { int z=e[i]*b.e[j]+up+ret.e[i+j]; ret.e[i+j]=z%10; up=z/10; } if(up!=0) { ret.e[i+b.len]=up; } } ret.len=len+b.len; ret.pp=pp+b.pp; while(ret.len>1&&ret.e[ret.len-1]==0) ret.len--; return ret; } void print() { int limit=0; while(e[limit]==0&&limit<pp) limit++;//去后导0 if(pp>=len) { printf("."); for(int i=pp;i>len;i--) { printf("0"); } for(int i=len-1;i>=limit;i--) { printf("%d",e[i]); } printf("\n"); } else { for(int i=len-1;i>=pp;i--) { printf("%d",e[i]); } if(limit<pp) { printf("."); for(int i=pp-1;i>=limit;i--) { printf("%d",e[i]); } } printf("\n"); } } }; char buf[10]; int n; int main() { while(scanf("%s%d",buf,&n)!=EOF) { BigInt t; t.set(buf); BigInt res; res.set("1.0"); for(int i=0;i<n;i++) { res=res*t; } res.print(); } return 0; }
相关文章推荐
- 设计模式(14)-Flyweight Pattern
- C++类构造函数,拷贝构造函数,赋值函数,析构函数几点注意
- c++——const
- 开始学习算法导论
- 数组引用:C++ 数组做参数 深入分析
- C++继承与派生
- 【c++程序】指针数组与数组指针
- c++——static关键字
- MFC使用ADO链接ACCESS的环境部署与注意事项
- C++经典面试问题20-40
- C++ 关于声明,定义,类的定义,头文件作用,内、外链接
- MFC学习笔记2_消息映射
- 【C++】类模板(template)作用对比举例
- C++模板
- LeetCode 209: Minimum Size Subarray Sum
- JNI官方规范中文版——如何在JNI中使用己有的C/C++库
- 抽空写的网站抓图片c++,增加了简单的多线程和互斥
- C++中的数学函数汇总
- unicode和ansi的区别
- 编程从C语言的梅花5开始