poj1001:1001:Exponentiation解题报告
来源:互联网 发布:服装货品数据分析 编辑:程序博客网 时间:2024/06/05 18:21
1001:Exponentiation
- 查看
- 提交
- 统计
- 提示
- 提问
- 总时间限制:
- 500ms
- 内存限制:
- 65536kB
- 描述
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 Rnwhere R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25.- 输入
- 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.
- 输出
- 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.
- 样例输入
95.123 120.4321 205.1234 156.7592 998.999 101.0100 12
- 样例输出
548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.126825030131969720661201
- 提示
- If you don't know how to determine wheather encounted the end of input:
s is a string and n is an integerC++while(cin>>s>>n){...}cwhile(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 */{...}
- 来源
- East Central North America 1988
- 查看
- 提交
- 统计
- 提示
- 提问
- 代码;
#include<iostream>#include<string>#include <algorithm>using namespace std;string multi(string str1, string str2){ reverse(str1.begin(), str1.end()); reverse(str2.begin(), str2.end()); size_t npos1 = str1.find('.'); size_t npos2 = str2.find('.'); if(npos1 == string::npos) npos1 = 0; else str1.erase(str1.begin() + npos1); if(npos2 == string::npos) npos2 = 0; else str2.erase(str2.begin() + npos2); string ans(str1.length() + str2.length(), '0'); for(size_t i = 0; i < str1.length(); ++i){ int carry = 0; for(size_t j = 0; j < str2.length(); ++j){ int val = ((str1[i] - '0') * (str2[j] - '0') + carry + ans[i + j] - '0'); ans[i + j] = val % 10 + '0'; carry = val / 10; } if(carry){ ans[i + str2.length()] = ans[i + str2.length()] + carry; } } size_t npos = npos1 + npos2; bool hasPoint = false; if(npos > 0){ ans.insert(npos, 1 ,'.'); hasPoint = true; } npos = ans.length() - 1; while(ans[npos--] == '0') ans.pop_back(); reverse(ans.begin(),ans.end()); if(hasPoint){ npos = ans.length() - 1; while(ans[npos--] == '0') ans.pop_back(); if(ans[npos + 1] == '.') ans.pop_back(); } return ans;}int main(){ string s,ans; int n; while(cin>>s>>n){ ans.assign(s); if(n == 1){ while(*(ans.begin()) == '0'){ ans.erase(ans.begin()); } size_t pos = ans.find('.'); if(pos != string ::npos){ pos = ans.length() - 1; while (ans[pos--] == '0') { ans.pop_back(); } if(ans[pos + 1] == '.') ans.pop_back(); } }else{ int bit = 1; for(int i = 2; i <= n; i<<=1){ bit = i; ans = multi(ans, ans); } for(int i = bit; i < n; ++i){ ans = multi(s,ans); } } cout<<ans<<endl; } return 0;}
阅读全文
0 0
- poj1001:1001:Exponentiation解题报告
- POJ1001 Exponentiation (解题报告)
- poj1001 Exponentiation 解题报告
- POJ 1001 Exponentiation解题报告
- POJ 1001 解题报告 Exponentiation
- POJ 1001 Exponentiation解题报告
- POJ1001解题报告
- poj1001解题报告
- POJ1001解题报告
- POJ1001 解题报告
- poj1001解题报告+测试数据
- poj1001 解题报告
- poj1001解题报告
- pku 1001 高精度 Exponentiation 解题报告
- POJ 1001 Exponentiation [解题报告] Java
- POJ解题报告——1001 Exponentiation
- POJ 1001 Exponentiation C++解题报告 JAVA解题报告
- POJ1001 Exponentiation
- 动画类型
- 258. Add Digits
- 使用Session防止表单重复提交
- Android布局中的空格和占一个汉字宽度的空格的实现
- 信息结构图和产品结构图的区别
- poj1001:1001:Exponentiation解题报告
- C#学习笔记-CodeFirst的使用
- POJ
- Objective-C Runtime 运行时之一:类与对象
- adb常用用法总结
- 梯度下降之特征缩放与学习速率
- 移动前端开发之viewport的深入理解
- JAVA学习之路,不走弯路便是最好的捷径!
- bzoj 1901 主席树+树状数组