题目思路
:(这应该是普及题里面很水的存在了)暴力判断,
只不过有个小坑就是当sum*w的时候会溢出(long)的问题。
所以我们要改进一下判断条件,从sum * w > r 变为 sum > r/w;
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
long l = input.nextLong();
long r = input.nextLong();
long w = input.nextLong();
if (w == 1) { //w为1的情况特判
if (l == 1) {
System.out.println("1 ");
System.exit(0);//终止程序
} else {
System.out.println("-1");
System.exit(0);
}
}
if (l == 1 && r == 1) {//当左右区间都为1的时候,打印“1”后终止程序。
System.out.println("1 ");
System.exit(0);
}
boolean flat = true;
long sum = 1;
while (true) {
if (sum >= l && sum <= r) {
System.out.print(sum + " ");
flat = false;
}
if (sum > r / w) { //为了避免sum*w溢出,故由 sum*w > r 转换为sum > r/w.
break;
}
sum = sum * w;
}
if (flat) {//如果没有打印过,则输出-1.
System.out.println("-1");
}
}
}