題目本題要求實現一種數字加密方法。首先固定乙個加密用正整數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位。輸入格式...