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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值