题解 P2699 【【数学1】小浩的幂次运算】
哈哈,这题好像没有完整题解,只有管理员的一个部分代码,那我就来发一波吧,我吧管理员的改成了完整的了,这思路确实很好,具体在代码里说明:
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll l,r,w,t=1;//t是累乘的记录变量,初值要赋为1
int main()
{
cin>>l>>r>>w;
bool found=0;//found表示有没有找到符合条件的数的一个布尔变量
if (l==1)//如果最左边是1,特判一下
{
found=true;//表示找到
printf("1 ");//输出1
}
if(w>1)//如果w等于1的话会死循环,一直是1
{
while(t<l/w||(t==l/w&&(l%w)))//这个语句是先把t乘到最左的边界,其实我觉得可以放到下面的循环里,加一个条件判断
t=t*w;
while (t<=r/w)//在l到r间找数
{
t*=w;
found=true;//找到数
printf("%lld ",t);//输出找到的数
}
}
if(!found) cout<<-1;//如果没有找到符合条件的数,输出-1
cout<<endl;//文末换行好习惯,2333~
return 0;
}