给出l,r,k
求出 k在【l,r】范围内的 所有 i次方
注意不要用double作为答案,double只能用来判断溢出。。。。
就是因为直接把pow(k,i)作为答案,,结果 精度太糟糕wa test35了,,,
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;
__int64 n,m;
__int64 l,r,k;
__int64 ans[100];
const double maxx=1000000000000000000;
int main()
{
__int64 i,j;
scanf("%I64d%I64d%I64d",&l,&r,&k);
__int64 cun=0;
__int64 tmpk=1;
for (i=0;i<=64;i++)
{
double tmp=pow((double)k,(double)i );
if (tmp<=maxx)
{
ans[++cun]=tmpk;
tmpk*=k;
}
else
break;
}
__int64 use=0;
for (i=1;i<=cun;i++)
{
if (ans[i]>=l &&ans[i]<=r)
{
use++;
}
}
if (use==0)
{
printf("-1\n");
}
else
{
__int64 line=0;
for (i=1;i<=cun;i++)
{
if (ans[i]>=l &&ans[i]<=r)
{
if (line )printf(" ");
printf("%I64d",ans[i]);
line=1;
}
}
printf("\n");
}
return 0;
}