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;
}