51nod 1449:砝码称重
现在有好多种砝码,他们的重量是
样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中。
Input
单组测试数据。 第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。
Output
如果能,输出YES,否则输出NO。
Input示例
3 7
Output示例
YES
如果没有天平,只是这些砝码表示m的话,只需要将m表示成w进制数,然后要求每一位不是0就是1.(每个质量的砝码只有一个,要么放,要么不放)
现在有这个天平,问题就转换成m可以表示成 两个由01组成的w进制数的差。
代码:
#pragma warning(disable:4996) #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> using namespace std; int w, m; int main() { //freopen("i.txt", "r", stdin); //freopen("o.txt", "w", stdout); scanf("%d%d", &w, &m); while (m) { if (m%w == 1 || m%w == 0) { m = m / w; } else if(m%w==w-1) { m = m / w + 1; } else { puts("NO"); return 0; } } puts("YES"); return 0; }