思路:
做这种题,第一步就是搞清楚题目要干什么,其实这个题目就是判断一个式子是否成立:
我们观察可以发现,每次都只有第一项不一定是的倍数,其他一定是的倍数.那么每次我们都判断下,然后将.然后一直处理到即可,假如中途不成立,那么输出,否则就是.
当然还有个值得注意的地方就是你代码应该先检测-1,再检测1.比如说你m=1,你检测-1/+1都是可以的,但是你先+1的话,就会死循环.
代码:
#include <bits/stdc++.h> using namespace std; int main() { int w,m; cin>>w>>m; while(m) { if(m%w==0) ; else if((m-1)%w==0) m--; else if((m+1)%w==0) m++; else { puts("NO");return 0; }m/=w; }puts("YES"); return 0; }