Codeforces Round #339 (Div. 2) A

题意:就是输出在区间[l,r]中k的次方数,没有就输出-1.

思路:开始用pow去计算次方,WA了两次估计是丢精度了,改成直接求次方就AC了.

  (pow慎用);

  题目还有一个坑点,就是long long的数据平方后会超出long long的范围从而导致数据溢出,新生成的数又刚好在l,r的范围里,这里有一个巧妙的处理方法

  

  

 1 #include<cstring>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     long long l,r,k;
 7     int ans=0;
 8     scanf("%lld%lld%lld",&l,&r,&k);
 9         long long c=1;
10         while(c<=r){                    
11         if(c>=l&&c<=r){
12             if(ans==0)    printf("%lld",c);
13             else    printf(" %lld",c);
14             ans++;
15         }
16         if(r/c<k)    break;        //这里是判断c*k>r; 这里也就是题目数据坑点的解法,这样做是不会超出long long的范围的 
17             c*=k;
18         }
19         if(!ans)    printf("-1
");
20 }

   

原文地址:https://www.cnblogs.com/sasuke-/p/5133615.html