POJ1001 Exponentiation
2017-01-09 22:17
253 查看
超越double,高精度实数求幂运算
大二的时候写过大整数的运算,这道acm题目则是实数高精度运算。
分步的思想,先将小数点删除作为大整数运算,模拟一遍手算乘法的过程小数点位置,只需要通过看是几位小数乘几位小数即可,大部分借鉴了他人的代码,理解就花了很长时间,但做了多余条件的删选,不失为一个实用的轮子。
另,这里是用字符串接受输入,要通过ascii码转化,看了java版本好像更精炼。
大二的时候写过大整数的运算,这道acm题目则是实数高精度运算。
分步的思想,先将小数点删除作为大整数运算,模拟一遍手算乘法的过程小数点位置,只需要通过看是几位小数乘几位小数即可,大部分借鉴了他人的代码,理解就花了很长时间,但做了多余条件的删选,不失为一个实用的轮子。
另,这里是用字符串接受输入,要通过ascii码转化,看了java版本好像更精炼。
#include <iostream> #include <string> using namespace std; int main() { string mlp; //乘数 int power; //乘数的幂 int r[151]; //保存结果 int hdot; while(cin>>mlp>>power) { hdot=0; //小数点位置,从右侧计起 //初始化存放结果,每一位都为1 for(int t=0;t<150;t++) { r[t]=-1; } //存在小数点的情况 if(mlp.find(".")!=string::npos) hdot=mlp.length()-mlp.find(".")-1; //itr迭代器的指向末尾字母 string::iterator itr=mlp.end()-1; //小数点不在0位,开始迭代 while(hdot>0&&itr>=mlp.begin()) { //若小数点存在数字间,去掉末尾的无效零 if(*itr!='0') { break; } //否则,后移 hdot--; itr--; } int cn=0; //迭代器前移 //r数组从0开始存放临时结果,0为最低位。cn为临时结果的下标 while(itr>=mlp.begin()) { if(*itr!='.') { r[cn]=*itr-'0'; cn++; } itr--; } int k=cn-1; //下标从cn-1开始,cn-1为最高位 int m=0; //保存临时数; while(k>-1) { m=m*10+r[k]; k--; } for(int i=1;i<power;i++) { int j=0; while(r[j]>-1) { r[j]=r[j]*m; j++; } j=0; while(r[j]>-1) { //j+1位置上仍是-1,把大于10的部分进位 if(r[j+1]==-1&&r[j]>=10) r[j+1]=r[j]/10; else r[j+1]+=r[j]/10; r[j]=r[j]%10; j++; } } //小数点的位置 hdot=hdot*power; int cnt=0; while(r[cnt]>-1) { cnt++; } if(hdot>=cnt) { cout<<"."; while(hdot>cnt) { cout<<"0"; hdot--; } //小数点位置置为0 hdot=0; } for(k=cnt-1;k>=0;k--) { //当前位的前一位为小数点位 if((k+1)==hdot) cout<<"."; cout<<r[k]; } cout<<endl; } return 0; }
相关文章推荐
- Perl ASCII 字符判断
- 与ASCII码相关的C语言字符串操作函数
- 常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8)
- javascript十六进制数字和ASCII字符之间的转换方法
- javascript ASCII和Hex互转的实现方法
- jQuery实时显示鼠标指针位置和键盘ASCII码
- PHP详解ASCII码对照表与字符转换
- 趣谈Unicode、Ascii、utf-8、GB2312、GBK等编码知识
- php实现图片转换成ASCII码的方法
- vbs实现unicode和ascii编码转换
- Python中输出ASCII大文字、艺术字、字符字小技巧
- php实现HTML实体编号与非ASCII字符串相互转换类实例
- JS中把字符转成ASCII值的函数示例代码
- javascript实现unicode与ASCII相互转换的方法
- 读写json中文ASCII乱码问题的解决方法
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类