PAT乙級 1048 數字加密 20

2021-07-22 06:39:10 字數 2209 閱讀 5677

題目

本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算:對奇數字,對應位的數字相加後對13取餘——這裡用j代表10、q代表11、k代表12;對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。

輸入格式

輸入在一行中依次給出a和b,均為不超過100位的正整數,其間以空格分隔。

輸出格式

在一行中輸出加密後的結果。

輸入樣例

1234567 368782971

輸出樣例

3695q8118

pat鏈結

1.這種從後向前比對的題目,反轉字串的話會比較簡單。可以先反轉字串,再從前向後依次加密。注意:如果b的位數比a小,要將少的位按數字0補充後再進行加密。

2.不反轉字串的話本來也很方便,從後向前依次比對,分奇偶進行加密,要注意數字與字元之間的轉換。

但是!!!由於:如果b的位數比a小,要將少的位按數字0補充後再進行加密。

解決方法是:開乙個更大的緩衝區,記錄加密後字串的實際起始位置:

思路參考其他部落格

char stra[110], buf_b[220];     //stra起始位置在陣列開頭

char *strb = buf_b+110; //strb起始位置在陣列中間,位置可以向前移

version1.0(不反轉字串)
/**

* @tag pat_b_1048

@126.com)

* @date

2016-8-27

18:14-

* @version

1.0* @language c++

* @ranking

455/1411

* @function 不反轉字串的做法

*/#include

#include

#include

char mod13 = "0123456789jqk";

char stra[110], buf_b[220]; //stra起始位置在陣列開頭

char *strb = buf_b+110; //strb起始位置在陣列中間,位置可以向前移

int main(int argc, char const *argv)

//偶數字相減

else

}if(lenb < lena) puts(strb+currb+1); //起始位置前移的情況

else

printf("%s\n", strb); //正常起始位置

return

0;}

version2.0(反轉字串)
/**

* @tag pat_b_1048

@126.com)

* @date

2016-8-27

18:14-

* @version

2.0* @language c++

* @ranking

455/1411

* @function 反轉字串的做法

*/#include

#include

#include

char mod13 = "0123456789jqk";

const int max = 110;

char stra[max], strb[max], ans[max];

void reverse(char s)

}int main(int argc, char const *argv)

else //對應加密演算法的偶數字

}reverse(ans); //反轉輸出

puts(ans);

return

0;}

char stra[110], buf_b[220];     //stra起始位置在陣列開頭

char *strb = buf_b+110; //strb起始位置在陣列中間,位置可以向前移

PAT 乙級 1048 數字加密 20

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用...

PAT乙級 1048 數字加密 20

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用...

PAT乙級1048 數字加密 20

題目 本題要求實現一種數字加密方法。首先固定乙個加密用正整數a,對任一正整數b,將其每1位數字與a的對應位置上的數字進行以下運算 對奇數字,對應位的數字相加後對13取餘 這裡用j代表10 q代表11 k代表12 對偶數字,用b的數字減去a的數字,若結果為負數,則再加10。這裡令個位為第1位。輸入格式...