思路:

做这种题,第一步就是搞清楚题目要干什么,其实这个题目就是判断一个式子是否成立:


我们观察可以发现,每次都只有第一项不一定是的倍数,其他一定是的倍数.那么每次我们都判断下,然后将.然后一直处理到即可,假如中途不成立,那么输出,否则就是.
当然还有个值得注意的地方就是你代码应该先检测-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;
}