问题描述
小R住在一个名为 X 国的国家,这里的货币非常特殊,面值为 V0,V1,V2,...,VnV0,V1,V2,...,Vn,并且 nn 可以无限大。该国的交易规则也很特别:在一次交易中,双方只能对每种面值的货币使用不超过两次。
例如,小R想买一件价格为 198 的物品,货币的基数 V=10V=10 时,小R可以使用 2 张 100(102)100(102) 的纸币,卖家则找回 2 张 1(100)1(100) 的纸币。由于这个奇怪的规则,很多 X 国人都无法快速判断某个物品是否可以用这种方式交易成功,他们常常会请聪明的你来帮助。
你能帮他们判断一下,是否能按照规则用给定的货币面值 VV 来完成价格为 WW 的交易吗?
约束条件:
V,W为整数,数据范围 2 ≤V, 1 ≤W
测试样例
样例1:
输入:
V = 10,W = 9
输出:'YES'
样例2:
输入:
V = 200,W = 40199
输出:'YES'
样例3:
输入:
V = 108,W = 50
输出:'NO'
public class Main {
public static String solution(int V, int W) {
// Edit your code here
if(V>W+2&&W>2){
return "NO";
}
if(W<3){
return "YES";
}
int i=0,tmp;
while(W>0){
if(Math.abs(V-W)<3){
return "YES";
}
if(W<3){
return "YES";
}
i=0;
//先指数逼近
while(Math.pow(V,i)<W){
i++;
}
i--;
tmp=(int)Math.pow(V,i);
if(tmp==W){
return "YES";
}
//再乘法
W=Math.abs(W-tmp*2);
if(i==0&&Math.abs(V-W)>2){
return "NO";
}
}
return "YES";
}
public static void main(String[] args) {
// Add your test cases here
System.out.println(solution(10, 9) == "YES");
System.out.println(solution(200, 40199) == "YES");
System.out.println(solution(108, 50) == "NO");
}
}