【题目】
题目描述:
给定一个 (2 ≤
≤ 16)进制数
,判断
是否能被
整除。
输入格式:
第一行是一个整数 (1 ≤
≤ 50),表示测试点数量。
对于每组数据,第一行一个整数 ,表示进制。
第二行一个 进制数,表示
。保证
是合法的
进制数,没有前导 0,且只由 0 - 9 、A - F 构成。
输出格式:
如果 可以被
整除,输出 “yes”,否则输出 “no”。
样例数据:
输入
2 16 2D 10 19
输出
yes no
备注:
对于 40% 的数据, 的长度不超过 5。
对于 100% 的数据, 的长度不超过 100000。
【分析】
首先很容易可以推出
那么对于一个 进制数,它的
就直接可以丢掉(模
等于 1)
因此累加每一位上的数,判断模 是否等于 0 就可以了
【代码】
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100005
using namespace std;
char s[N];
int main()
{
// freopen("kbased.in","r",stdin);
// freopen("kbased.out","w",stdout);
int n,i,k,l;
scanf("%d",&n);
while(n--)
{
scanf("%d",&k);
scanf("%s",s+1);
l=strlen(s+1);
int sum=0;
for(i=1;i<=l;++i)
{
if(s[i]>='0'&&s[i]<='9') sum+=s[i]-'0';
if(s[i]>='A'&&s[i]<='F') sum+=s[i]-'A'+10;
}
if(sum%(k-1)==0) printf("yes\n");
else printf("no\n");
}
// fclose(stdin);
// fclose(stdout);
return 0;
}