因为pow会有精度丢失
所以使用了一直自乘
对于最大值
因为res有可能超出__int64
所以终止条件只需要在res自乘前写
res>r/k
效果等同于在循环开始时写
res>r (因为此时已经执行res=res*k)
#include<stdio.h>
int main() {
// freopen("input.txt","r",stdin);
// freopen("ACoutput.txt","w",stdout);
__int64 l,r,k;
while(scanf("%I64d %I64d %I64d",&l,&r,&k)!=EOF) {
bool flag=false;
__int64 res=1;
while(1) {
if(res>=l&&res<=r) {
printf("%I64d ",res);
flag=true;
}
if(res>r/k)
break;
res*=k;
}
if(!flag)
printf("-1");
printf("
");
}
return 0;
}