您的位置:首页 > 其它

614A Link/Cut Tree

2016-01-17 17:06 176 查看
//614A Link/Cut Tree
//k的n次幂,范围在[l,r],次幂爆ll的时候查水表一下
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 10e18;
int main()
{
ll l, r, k, ans, pre;//ans:累计乘积,pre:水表上一个ans
int flag;//输出标志
cin>>l>>r>>k;
ans = 1;
if(l==1) cout<<1<<" "<<endl;//左限1直接输出
pre = 0; flag = 1;
for(int i=1; ; i++)
{
ans *= k;
//ans乘的时候会溢出错误,如何判断溢出,下面条件查水表,本次乘积除以上一次水表数应该是固定的基数,如果不是则溢出了
if(ans>maxn || ans<0 || pre!=0 && ans/pre!=k) break;//这里的pre!=0并不是除零判断,而是表示pre更新过了(当然也可以说从第二个数开始)
pre = ans;
if(l<=ans && ans<=r)
{
cout<<ans<<" "<<endl; flag = 0;
}
else if(ans<l) continue;
else if(ans>r) break;
}
if(flag && l!=1) cout<<"-1"<<endl;//没有任何输出则输出-1
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: