UVA 748 求幂
来源:互联网 发布:北京php工程师培训 编辑:程序博客网 时间:2024/06/04 18:42
以前百练写过,贼麻烦。。
转一个http://www.cnblogs.com/penseur/archive/2011/02/16/1956046.html
#include<iostream>#include<string>#include<cctype>using namespace std;//大数相乘string multiply(string str1,string str2){ char source[300][1000]; int len[300]={0}; if(str1=="0"||str2=="0") { return "0"; } memset(source,'0',sizeof(source)); for(int i=0;i<300;i++) len[i]=0; char midstr1[300]; char midstr2[300]; int mstr1p=0; int mstr2p=0; memset(midstr1,'0',sizeof(midstr1)); memset(midstr2,'0',sizeof(midstr2)); int str1len=str1.size(); int str2len=str2.size(); for(int i=str1len-1;i>=0;i--) midstr1[mstr1p++]=str1[i]; for(int i=str2len-1;i>=0;i--) midstr2[mstr2p++]=str2[i]; //cout<<midstr1<<midstr2<<endl; int space=0; for(int i=0;i<mstr2p;i++) { char c=midstr2[i]; int addtion=0; int d=c-'0'; int space=i; for(int j=0;j<mstr1p;j++) { int one=midstr1[j]-'0'; int midmult=one*d+addtion; addtion=midmult/10; source[i][space++]=midmult%10+'0'; } if(addtion>0) source[i][space++]=addtion+'0'; len[i]=space; } //数值初始化完毕进行累加 char sum[1000]; memset(sum,'0',sizeof(sum)); int point=mstr2p-1; int pflag=0; int longs=0; for(int i=899;i>=0;i--) { if(pflag) { sum[i]=source[point][i]; } else { if(source[point][i]!='0') { pflag=1; longs=i; sum[i]=source[point][i]; } } } for(int i=0;i<point;i++) { int addtion=0; for(int j=0;j<len[i];j++) { int one=source[i][j]-'0'; int midsum=one+addtion+sum[j]-'0'; addtion=midsum/10; sum[j]=midsum%10+'0'; } if(addtion>0) { for(int k=len[i];k<1000;k++) { int midsum=sum[k]-'0'+addtion; addtion=midsum/10; sum[k]=midsum%10+'0'; if(addtion==0) break; } } } char copysm[10000]; int cp=0; memset(copysm,0,sizeof(copysm)); int flag=0; for(int i=longs+12;i>=0;i--) { if(flag) copysm[cp++]=sum[i]; else { if(sum[i]!='0') { flag=1; copysm[cp++]=sum[i]; } } } string str(copysm); return str;}// 删除前导零。 void delLeadZero(string & a) { int i = 0; while (a[i] == '0') i++; if (i == a.size()) a = "0"; else a = a.substr(i, a.size() - i); } int main(){ string str; while(getline(cin,str)) { string left=str.substr(0,6); string right=str.substr(7); int nright=right[1]-'0'; if(right[0]!=' ') nright=(right[0]-'0')*10+nright; int pos=left.find('.'); int len=5-pos; left.replace(pos,1,""); delLeadZero(left); string powers=left; for(int i=0;i<nright-1;i++) { powers=multiply(powers,left); } int span=len*nright; int plen=powers.size(); if(span<plen) { int st=plen-span; powers.insert(st,"."); } else { int st=span-plen; cout<<"."; for(int i=0;i<st;i++) cout<<"0"; } deltrailZero(powers); cout<<powers<<endl; } return 0;}
- UVA 748 求幂
- UVa 748 求幂
- UVA 748(求幂)
- UVa 748 / POJ 1001 Exponentiation (浮点高精度求幂&正则表达式的应用)
- UVa 748 求幂 及相关类型转换的陷进和研究
- Uva 796 求桥
- uva 202求循环小数
- 【求最小割边集】UVA
- UVA 315 求割点数
- uva 1456 dp 求期望
- uva 11149 矩阵快速幂 求矩阵1-n次幂的和
- Uva 10655 已知a+b,ab 求a^n+b^n 矩阵快速幂
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- UVa 10780 幂和阶乘 求n!中某个因子的个数
- UVA 11149 Power of Matrix(求幂函数的前n项和)
- UVA-11029-Leading and Trailing-(快速幂,log10函数求大数首末数)
- UVA 438 求三角形外接圆的周长
- UVa 558 - Wormholes (求负回路)
- hdu1973 || poj3126 Prime Path
- 用shell切分文件--split
- 瑞士军刀NC下载与使用教程
- 在向服务器发送请求时发生传输级错误
- R,不仅仅是一种语言
- UVA 748 求幂
- ios tableview间隔线效果
- 联通电信收入之和接近移动:渐形成三足鼎立
- 埃拉托斯特尼筛法
- nova-compute启动分析-3
- 近期思维片段
- System.arraycopy()的使用
- ThreeSum的问题
- 中国互联网10年江湖录:最年轻的传奇