21. 校验码
【問題描述】
傳送一個B(B≤16)進制的數值N時,最后加上一個一位(B進制的)校驗碼,使得N加上校驗位后能被B-1整除。比如十進制的數值12310,其校驗碼就是3,因為十進制數值123310能被9整除。16進制的數7816,其校驗碼為0,因為16進制的78016是15的倍數。超過十進制后,用字母a表示10,字母b表示11,字母c表示12,字母d表示13,字母e表示14,字母f表示15。
告訴你進制B,以及一個B進制的正整數N,要求你計算正整數N在B進制下的校驗碼。
【輸入形式】
輸入第一行正整數t (10 ≤ n ≤ 100),表示有多少組測試數據。
后面有t行,每行兩個正整數B,N(2≤ B≤16),中間用一個空格隔開,B是10進制整數,N用B進制形式表示。測試數據保證沒有非法的B進制數N(也即N中每一位都是在0到B-1之間,沒有前導0)。
40%的測試數據N的位數L 1 ≤ L≤ 10;
30%的測試數據N的位數L 1 ≤ L≤ 102;
20%的測試數據N的位數L 1 ≤ L≤ 103;
10%的測試數據N的位數L 1 ≤ L≤ 104;
【輸出形式】
對于每組測試數據,輸出一位占一行:正整數N在B進制下的校驗碼。(如果校驗碼可以為B-1,也可以為0,輸出0)。
【樣例輸入】
4 10?123 16?78 16?1234321 12?ab【樣例輸出】
3 0 e 1【樣例說明】
第一行的4表示有4組測試數據,下面四行,每行一組測試數據。
第一組測試數據 10進制數123 最后添加檢驗碼3,10進制數1233是9(=10-1)的倍數
第二組測試數據 16進制數78 最后添加檢驗碼0,16進制數780是15(=16-1)的倍數
第三組測試數據 16進制數1234321 最后添加檢驗碼e(=14),16進制數1234321e是15(=16-1)的倍數
第四組測試數據 12進制數ab 最后添加檢驗碼1,12進制數ab1是11(12-1)的倍數
【Tips】
B進制的數能被B-1整除,當且僅當各位數字和能被B-1整除。
第一組測試數據 10進制數123 最后添加檢驗碼3,10進制數1233各位數字和是9,是9的倍數
第二組測試數據 16進制數78 最后添加檢驗碼0,16進制數780各位數字和是15,是15的倍數
第三組測試數據 16進制數1234321 最后添加檢驗碼e,16進制數1234321e各位數字和是30,是15的倍數
第四組測試數據 12進制數ab 最后添加檢驗碼1,12進制數ab1各位數字和是22,是11的倍數
注意:查看題干最后的tips,將會變得十分簡單 。
#include<bits/stdc++.h> using namespace std; int numchange(char);//將輸入的字母轉換為相應的數字 char charchange(int sss);//將所得校驗碼轉換為相應的字母 int main() {int t;//測試組數cin>>t;while(t--) {int B;//進制string n;//cin>>B;cin>>n;int key=B-1;int sum=0;int temp;char ckey;for(int i=0; i<n.size(); i++) {if(n[i]>='a'&&n[i]<='f') { //需要進行轉換temp=numchange(n[i]);} else {stringstream ss;ss<<n[i];ss>>temp;ss.clear();}sum+=temp;}for(int j=0; j<=15; j++) {if((sum+j)%key==0) {if(j>=0&&j<=9) {cout<<j<<endl;break;} else {ckey=charchange(j);cout<<ckey<<endl;break;}}}} } int numchange(char ss) {int temp1;switch(ss) {case 'a': {temp1=10;break;}case 'b': {temp1=11;break;}case 'c': {temp1=12;break;}case 'd': {temp1=13;break;}case 'e': {temp1=14;break;}case 'f': {temp1=15;break;}}return temp1; } char charchange(int sss) {char temp2;switch(sss) {case 10: {temp2='a';break;}case 11: {temp2='b';break;}case 12: {temp2='c';break;}case 13: {temp2='d';break;}case 14: {temp2='e';break;}case 15: {temp2='f';break;}}return temp2; }總結
- 上一篇: 水库大坝的安全监测内容包括哪些?
- 下一篇: arduino采集数据结合掌控版使用mi