poj1001_BigNumMultipy
来源:互联网 发布:淘宝广州模特招聘骗局 编辑:程序博客网 时间:2024/06/12 23:24
对于高精度数注意:
1.数据存储方式:数组和字符串
2.正确的运算过程
+、-:保持进位借位,用ncarry记录
*:c[i+j]+=a[i]*b[j]
/:用减法迭代a[1..n]-b[1..n],每次c[1..n]++
3.正确的输出表示,对于小数点的处理
这是大数幂次方
#include <iostream>#include <stdlib.h>#include <cstring>#define SIZE 1000using namespace std;/*1.保证运算正确 2.获得数据并去掉小数点,依据幂指数确定小数点位数 3.调用高精度乘法获得整数结果 4.补上小数点 5.若小数点的总位数大于结果长度,应先输出点.*///运算前去掉小数点后多余的0,point 记录小数点后的位数void preprocess(char s[],int& point){int len = strlen(s);char tmp[SIZE];int i = len - 1;//小数点不会出现在第一位while(i>0){if(s[i]=='.') break;i--;}//小数点被忽略了if(i>0){while(s[len-1]=='0') len--;point = len-i-1;int j=0;for(i=0;i<len;i++)if(s[i]!='.')s[j++]=s[i];s[j]=0;}}//将数组逆置void reverse(char t[],int n){int i=0,j=n-1;while(i<j){char tmp = t[i];t[i] = t[j];t[j] = tmp;i++,j--;}}void check(int tmp[],int n,char result[]){int i,j,k=0;//按十进制表示for(i=0;i<n;i++){tmp[i+1]+=tmp[i]/10;tmp[i]=tmp[i]%10;}//reverse and change to char arraywhile(tmp[i]==0) i--;for(j=i;j>=0;j--)result[k++]=tmp[j]+'0';//添加结束标志位result[k]=0;}//数组乘法void mul(char s[],char t[],char result[]){int ls = strlen(s);int lt = strlen(t);reverse(s,ls);reverse(t,lt);int tmp[SIZE*2]={0};int i,j,k;int a=0;for(i=0;i<ls;i++)for(j=0;j<lt;j++)tmp[i+j]+=(int)(s[i]-'0')*(int)(t[j]-'0');check(tmp,i+j,result);}//添加小数点void show(int point,char result[]){int len = strlen(result);int tmp[SIZE*2];//若为0.00..等的情况if(point>=len)cout<<".";while(point>len){cout<<"0";point--;}for(int i=0;i<len;i++){cout<<result[i];if(i==len-1-point&&point!=0)cout<<".";}cout<<endl;}int main(){char s[SIZE];int n;while(cin>>s>>n){if(n==0){cout<<"1"<<endl;continue; }int i,point=0;preprocess(s,point);char result[SIZE*2];char tmp[SIZE];strcpy(result,s);strcpy(tmp,s);//n次乘以自己,阶乘for(i=0;i<n-1;i++){strcpy(s,tmp);mul(s,result,result);}show(point*n,result);}return 0;}转自:网上poj1001讲解
0 0
- poj1001_BigNumMultipy
- 博弈小结(备忘录)
- Maven 的介绍以及使用(初学者笔记)
- [一站式服务] Windows下C++文件编译.so 文件
- hdu 1598 find the most comfortable road
- poj 2823 Sliding Window (单调队列 or 线段树)
- poj1001_BigNumMultipy
- [hrbust 2029] 二十世纪八十年代(状态压缩)
- [hrbust 2030] 成语接龙(状态压缩 + dfs)
- [poj 3468] A Simple Problem with Integers(裸线段树)
- [hdu 1181] 变形课(传递闭包)
- [hdu 1016] Prime Ring Problem(剪枝dfs)
- [hdu 3829] Cat VS Dog(二分图最大独立集)
- [转载] 有向图强连通分量的Tarjan算法 ——byvoid
- [iOS] 关于 self = [super init];