博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku_1001_Exponentiation(求高精度的幂)
阅读量:6039 次
发布时间:2019-06-20

本文共 2734 字,大约阅读时间需要 9 分钟。

题意: 求一个实数R的n次幂  即ans = R ^ n;

方法: 模拟高精度乘法
两个大数相乘,以字符串输入,用数组a[], b[]按位存储,最终结果用另外一个数组c[]存储
核心代码:

memset(c, 0, sizeof(c)); //初始化结果数组for(i = 0; i < l1; i++)     for(j = 0; j < l2; j++)      {            c[i + j] += a[i] * b[j];            c[i + j + 1] += c[i + j] / 10;            c[i + j] %= 10;      }

此题方法,将小数点额外运算,计数小数点的最终位置,运用多次大数相乘,计算结果。

#include
#include
int main(){ char d[150]={
0}; int n; while(scanf("%s%d",d,&n)!=EOF) { int a[150]={
0},b[150]={
0},c[150]={
0},temp,flag; int lend,lena,lenb,lenc,len,i,j,k,digit,s; lend=strlen(d)-1; //整个字符串长度 for(i=0;d[i];i++) if(d[i]=='.') break; digit=lend-i; //小数部分的长度 for(j=i;d[j];j++) d[j]=d[j+1]; //去掉小数点的字符串 lend=lend-1; //调整长度 for(i=0;i<=lend/2;i++) //字符串倒转 { temp=d[i]; d[i]=d[lend-i]; d[lend-i]=temp; } for(i=0;d[i];i++) a[i]=d[i]-48; //字符串转为数 lena=lend; for(i=0;i<=lena;i++) b[i]=a[i]; //浮点数复制一份 lenb=lena; for(i=1;i<=n-1;i++) //浮点数n次方 结果在c数组中 { for(j=0;j<=lenb;j++) //两重for将两数相乘 for(k=0;k<=lena;k++) { c[j+k]+=a[k]*b[j]; c[k+j+1]+=c[j+k]/10; c[j+k]%=10; } k--;j--; if(c[k+j+1]!=0) lenc=j+k+1; else lenc=j+k; for(j=0;j<=lenc;j++) b[j]=c[j]; lenb=lenc; memset(c,0,sizeof(c)); } digit=n*digit; //总的小数位数 len=lenb+1-digit; //以下将结果输出 flag=0; for(i=lenb-len;i>=0;i--) if(b[i]!=0) { flag=1; break; } if(flag==0) { for(i=lenb;i>=lenb-len+1;i--) printf("%d",b[i]); printf("\n"); continue; } if(len==1&&b[lenb]==0) printf("."); else { for(i=lenb;i>=lenb-len+1;i--) printf("%d",b[i]); printf("."); } for(i=0;i<=lenb-len;i++) if(b[i]!=0) { temp=i; break; } for(i=lenb-len;i>=temp;i--) printf("%d",b[i]); printf("\n"); } return 0;}

转载地址:http://dwghx.baihongyu.com/

你可能感兴趣的文章
网页视频播放器插件源码
查看>>
2019-4-23 plan
查看>>
[编解码] 关于base64编码的原理及实现
查看>>
WinDbg配置和使用基础
查看>>
转:Object-Runtime的基本数据类型
查看>>
JMJS系统总结系列----Jquery分页扩展库(五)
查看>>
Excel技巧之——英文大小写转换(转)
查看>>
Google 翻译的妙用
查看>>
常用的集合
查看>>
Unity3D工程源码目录
查看>>
杀死进程命令
查看>>
cookie 和session 的区别详解
查看>>
Mongodb对集合(表)和数据的CRUD操作
查看>>
Target runtime Apache Tomcat is not defined.错误解决方法
查看>>
VC++ 监视文件(夹)
查看>>
【转】keyCode对照表及JS监听组合按键
查看>>
[Java开发之路](14)反射机制
查看>>
mac gentoo-prefix安装git svn
查看>>
浅尝异步IO
查看>>
C - Train Problem II——(HDU 1023 Catalan 数)
查看>>