题解 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;
}