1. 程式人生 > >2018.10.04 NOIP模擬 K進位制(模擬)

2018.10.04 NOIP模擬 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。

簽到題,直接瞎模擬就行了。 程式碼:

#include<bits/stdc++.h>
using namespace std; int t,n,k,mod,mul; char s[100005]; inline int calc(char x){ if(isdigit(x))return x-'0'; return x-'A'+10; } int main(){ freopen("kbased.in","r",stdin); freopen("kbased.out","w",stdout); scanf("%d",&t); while(t--){ scanf("%d%s",&k,s),n=strlen(s),reverse(s,s+n),mod=0,mul=
1; for(int i=0;i<n;++i){ (mod+=mul*calc(s[i]))%=(k-1); mul=mul*k%(k-1); } if(mod)puts("no"); else puts("yes"); } return 0; }