CF552C的题解
(一)
相当于问你能否将 \(m\) 拆成奇特的 \(n\) 进制是每一位是 \(1\) 或 \(0\) 或 \(-1\)。
然后就用这题的方法拆分。
- 
先对 \(n\) 取余。
- 
如果余 \(0\),直接继续。
 - 
如果余 \(1\),\(m=m-1\)。
 - 
如果余 \(-1\),\(m=m+1\)。
 - 
否则,输出 NO。
 
 - 
 - 
换下一位:\(m=m\div n\)。
 
(二)
AC 代码。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
signed main(){
	scanf("%lld%lld",&n,&m);
	if(n==2){
		puts("YES");
		return 0;
	}
	while(m>0){
		int p=m%n;
		if(p==1){
			m--;
		}
		else if(p==n-1){
			m++;
		}
		else if(p!=0){
			puts("NO");
			return 0;
		}
		m/=n;
	}
	puts("YES");
	return 0;
}

                
            
        
浙公网安备 33010602011771号