Codeforces Round #339 (Div. 2) A - Link/Cut Tree
题意:就是输出在区间[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\n"); 20 }