您的位置:首页 > 大数据

poj1001(大数据)

2014-08-11 15:12 316 查看
http://poj.org/problem?id=1001

这个问题是要请你求出 Rn 的精确值。在这里R是一个实数(0.0 < R <99.999), n 是一个整数(0 < n <= 25)。

Input

每组测试资料一列,包含了R,n,R的位置为第1行到第6行,n的位置为第8行到第9行。

Output

输出 Rn 的精确值。前后方无作用的0不应该出现。

Sample input

95.123 12

0.4321 20

5.1234 15

6.7592 9

98.999 10

1.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721

.00000005148554641076956121994511276767154838481760200726351203835429763013462401

43992025569.928573701266488041146654993318703707511666295476720493953024

29448126.764121021618164430206909037173276672

90429072743629540498.107596019456651774561044010001

1.126825030131969720661201这个问题是要请你求出 Rn 的精确值。在这里R是一个实数(0.0 < R <99.999), n 是一个整数(0 < n <= 25)。

Input

每组测试资料一列,包含了R,n,R的位置为第1行到第6行,n的位置为第8行到第9行。

Output

输出 Rn 的精确值。前后方无作用的0不应该出现。

Sample input

95.123 12

0.4321 20

5.1234 15

6.7592 9

98.999 10

1.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721

.00000005148554641076956121994511276767154838481760200726351203835429763013462401

43992025569.928573701266488041146654993318703707511666295476720493953024

29448126.764121021618164430206909037173276672

90429072743629540498.107596019456651774561044010001

1.126825030131969720661201

把小数相乘转换为整数相乘;最后确定小数点位置

#include <iostream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cstdio>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<list>
#include<set>
#define INF (1<<30)

using namespace std;
char aa[400];
int  n;

void cf(int cnt)
{
int la=strlen(aa)-1,cnt1=cnt;
int a[400]= {0},b[400]= {0},c[400]= {0};
//    while(aa[la]=='0'&&cnt>0)
//    {
////        cout<<aa[la]<<cnt;
//        la--;
//        cnt--;
//    }
//    cout<<endl;
cnt1=cnt;
for(int i=la,j=0; i>=0; i--)
{
a[j]=b[j]=aa[i]-'0';
//        cout<<a[j];
j++;

}
//    cout<<endl;
while(1)
{
if(n==1)  break;
n--;
for(int i=0; i<190; i++)
{
for(int j=0; j<195; j++)
{
c[i+j]+=a[i]*b[j];
}
}
int t=0;
for(int i=0; i<399; i++)
{
c[i]+=t;
a[i]=c[i]%10;
t=c[i]/10;
c[i]=0;
}
cnt+=cnt1;
}
//    for(int i=199;i>=0;i--)
//        printf("%d",a[i]);
//    cout<<endl;
int i=399;
while(a[i]==0&&i>=0) i--;
int j=0;
while(a[j]==0&&j<cnt) j++;
if(cnt>i)
{
cout<<'.';
int t=cnt-i-1;
while(t--)  cout<<0;
while(1)
{
if(i<0)  break;
printf("%d",a[i--]);
if(i==j-1)  break;
}
cout<<endl;
}
else
{
while(1)
{
if(i<0)  break;
if(i+1==cnt)  cout<<'.';
cout<<a[i];
i--;
if(i==j-1)  break;
}
cout<<endl;
}

}

int main()
{
while(scanf(" %s %d",aa,&n)!=EOF)
{
int  cnt=0;
double s=atof(aa);
for(int i=0; aa[i]!='\0'; i++)
{
if(aa[i]=='.')
{
while(aa[i]!='\0')
{
aa[i]=aa[i+1];
cnt++;
i++;
}
cnt--;
break;
}
}
//        cout<<cnt<<endl;
if(s==0)  printf("0\n");
else if(n==0)  printf("1\n");
else
cf(cnt);
}
memset(aa,0,sizeof(aa));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: