Codeforces 614A Link/Cut Tree (暴力)
题意
输出值在l和r之间的k的幂。
思路
直接暴力,因为指数增长非常快,1e18内,连2都只需要57次就能溢出了。但问题是,这个时候溢出可能直接从负数溢出回正数了,如这个例子:
237171123124584251 923523399718980912 7150
而且溢出后还刚刚好在这个区间之内。。。
所以我的判断到负数跳出并不能用,需要用r/k来比较,这样不会溢出。
学到了新的判断溢出的方法。
代码
#include <iostream>
#include <set>
using namespace std;
set<unsigned long long> ss;
int main() {
unsigned long long l,r,k;
cin>>l>>r>>k;
unsigned long long counter=1;
bool flag=false;
for(unsigned long long i=0;;i++)
{
if(counter>=l && counter<=r)
{
flag=true;
cout<<counter<<" ";
}
if(counter>r/k)//警惕!
{
break;
}
counter*=k;
}
if(!flag)
{
cout<<"-1"<<endl;
}
return 0;
}
参考了以下博主,在此表示感谢