版权声明:虽然我只是个小蒟蒻但转载也请注明出处哦 https://blog.csdn.net/weixin_42557561/article/details/82937252
K进制
【题意】
给定一个K(2<=K<=16)进制数a,判断a是否能被K-1整除。
【输入】
第一行是一个整数 t(1<=t<=50),表示测试点数量。
对于每组数据,第一行一个整数 K,表示进制。
第二行一个 K 进制数,表示 a。保证 a 是合法的 K 进制数,没有前导 0,且只由’0’-
‘9’、’A’-‘F’构成。
【输出】
如果a可以被K-1整除,输出”yes”,否则输出”no”。
【样例输入】
2
16
2D
10
19
【样例输出】
yes
no
【数据】
对于40%的数据,a的长度不超过 5。
对于100%的数据,a的长度不超过100000。
分析
太难得了。。。。我居然歪打误撞敲出来正解???
但是最后居然被dzy大佬diss:这道题直接模拟就好了。。。
(默默沮丧……)
代码
#include<bits/stdc++.h>
#define in read()
using namespace std;
inline int read(){
char ch;int f=1,res=0;
while((ch=getchar())<'0'||ch>'9') if(ch=='-') f=-1;
while(ch>='0'&&ch<='9'){
res=(res<<3)+(res<<1)+ch-'0';
ch=getchar();
}
return f==1?res:-res;
}
int t,k;
char st[200000];
int main(){
t=in;
while(t--){
k=in;
scanf("%s",st);
if(k==2) {
printf("yes\n");
continue;
}
int len=strlen(st),sum=0;
for(int i=0;i<len;++i){
if(st[i]>='A'&&st[i]<='F') sum+=st[i]-'A'+10;
else sum+=st[i]-'0';
}
if(sum%(k-1)==0) printf("yes\n");
else printf("no\n");
}
return 0;
}