题目链接:http://poj.org/problem?id=1001
题意:求小数R的N次幂
思路:结果数字串的长度最大为5*25,考虑用大数模板。先将小数转化为整数,输出时再考虑小数点位数。
代码:
#include
#include
#include
#include
#include
#include
typedef long long LL;
using namespace std;
const int INF=INT_MAX;
const int MAXN=5005;
const int mod=1e9+7;
const int N = 1e4 + 10;
const double eps=1e-9;
int n;
char ans[6000000];
double m;
struct BigInt
{
const static int mod=10;
const static int mlen=1;
int a[600],len;
BigInt(int v=0)
{
memset(a,0,sizeof(a));
len=0;
do
{
a[len++]=v%mod;
v/=mod;
}
while(v);
}
BigInt(char s[])
{
memset(a,0,sizeof(a));
int slen=strlen(s);
len=(slen-1)/mlen+1;
int index=0;
for(int i=slen-1;i>=0;i-=mlen)
{
int t=0;
int j=max(0,i-mlen+1);
while(j<=i)
{
t=t*10+s[j]-'0';
j++;
}
a[index++]=t;
}
}
BigInt operator +(const BigInt &b)
{
BigInt ret;
ret.len=max(len,b.len);
memset(ret.a,0,sizeof(ret.a));
for(int i=0;i0)ret.len++;
return ret;
}
BigInt operator *(const BigInt &b)
{
BigInt ret;
ret.len=len+b.len;
memset(ret.a,0,sizeof(ret.a));
for(int i=0;i1)ret.len--;
return ret;
}
void print()
{
printf("%d",a[len-1]);
for(int i=len-2;i>=0;i--)
printf("%d",a[i]);
}
void print2(int decn)
{
if(len=0;i--)
printf("%d",a[i]);
}
else if(decn==0)
{
for(int i=len-1;i>=0;i--)
printf("%d",a[i]);
}
else
{
for(int i=len-1;i>=decn;i--)
printf("%d",a[i]);
printf(".");
for(int i=decn-1;i>=0;i--)
printf("%d",a[i]);
}
}
};
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%lf%d",&m,&n)!=EOF)
{
int ten=1;
int cnt=0;
while(1)
{
double now=m*ten;
if(now-floor(now)