【2018/10/04】T1 - 模拟 - K进制

版权声明:虽然我只是个小蒟蒻但转载也请注明出处哦 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”。 
 
【样例输入】 

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42557561/article/details/82937252
今日推荐