您的位置:首页 > 其它

HDU1063 Exponentiation

2014-05-30 00:11 369 查看
     点击打开链接

   题意是给你一个 0.0~99.999  的小数R 和0~25的整数 n 让你求R^n   高精度  最后输出结果要去掉整数部分前缀0和小数部分后缀0   如果是整数的话不输出小数点  好久没写高精度了...  需要格外注意去零的过程 比如1.000和 1000的区别

代码: #include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
char ts[10000];
char ss[10],r[10];
char qs[10000];
void GJC(char *ts,char *ss)
{
memset(qs,0,sizeof(qs));
int len=strlen(ss);
int l=strlen(ts);
for(int i=0;i<l+len+1;i++)
qs[i]='0';
for(int i=0;i<len;i++)
{
int jw=0,j;
for(j=0;j<l;j++)
{
int p=qs[i+j]-'0'+(ss[i]-'0')*(ts[j]-'0')+jw;
qs[i+j]=p%10+'0';
jw=p/10;
}
if(jw!=0) qs[i+j]+=jw;
}
int ls=strlen(qs);
for(int t=0;t<ls;t++)
ts[t]=qs[t];
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n;
while(scanf("%s%d",r,&n)!=EOF)
{
memset(ts,0,sizeof(ts));
memset(ss,0,sizeof(ss));
int t=0,cnt=0;
for(int i=0;i<6;i++)
{
if(r[i]=='.') {t=5-i;continue;}
ss[cnt++]=r[i];
}
int len=strlen(ss);
for(int i=0;i<len;i++)
ts[i]=ss[len-i-1];
for(int i=0;i<len;i++)
ss[i]=ts[i];
for(int i=1;i<n;i++)
GJC(ts,ss);
int length=strlen(ts);
/*
for(int i=0;i<length;i++)
printf("%c",ts[length-1-i]);
printf("\n");
*/
int pxy=t*n;
bool dif=0;
int s=0,h;
for(h=0;h<pxy;h++)
if(ts[h]!='0') {s=h;break;}
if(h==pxy) s=pxy;
//printf("s=%d\n",s);
//printf("pxy=%d\n",pxy);
for(int i=length-1;i>=s;i--)
{
if(i==pxy-1) {printf(".");dif=1;}
if(ts[i]=='0'&&!dif) continue;
dif=1;
printf("%c",ts[i]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  高精度