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;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步