題目描述
輸入一串字符(長度不超過100)和一個正整數k,將其中的英文字母加密並輸出加密後的字符串,非英文字母不變。加密思想:將每個字母c加一個序數k,即用它後面的第k個字母代替,變換公式:c=c+k。如果字母爲z,則後一個字母是a,也就是字母字符形成一個圓。
輸入
輸入第一行是若干字符,以回車結束。輸入第二行是一個整數k,k是int範圍內的正整數;
輸出
輸出加密後的字符串。
樣例輸入
12kjsdZjk 280
樣例輸出
12edmxTde
提示
注意,即使通過模運算把k控制在小於26的範圍內,依然要考慮char類型溢出的問題,如'z' + 10也會超出char的表示範圍。但慶幸的是,我們只需要考慮向內存存儲時的char類型溢出,而在計算過程中不會溢出,因爲計算過程中char會被提升爲int類型。
tips:
1 字符與數字進行運算時,運算結果會自動變成int
2 判斷此時的結果是否超出 'z' 或 'Z'
#include<stdio.h>
#include<stdlib.h>
int main(){
char buf[1024];
int num, temp;
gets(buf);
scanf("%d", &num);
num = num % 26;
for (int i = 0; buf[i] != '\0'; i++)
{
if (buf[i]>='a'&&buf[i]<='z')
{
temp = (buf[i] + num);
if (temp>122)
{
buf[i] = temp - 26;
}
else{
buf[i] = temp;
}
}
else if (buf[i]>='A'&&buf[i]<='Z')
{
temp = (buf[i] + num) ;
if (temp>90)
{
buf[i] = temp - 26;
}
else
{
buf[i] = temp;
}
}
}
puts(buf);
}