2 条题解
-
9
c=m+(k-'A')
m=c-(k-'A')
但因为当k-'A'比c大时,可能会从 c='A'成'8',='a'成'[',
a越位Z中是有其他字符的ASCll(91-96),原来大小写也会变
因此(c[i]<='Z'&&m[i]<'A'||c[i]>='a'&&m[i]<'a')判断是否越位
+32-('a'-'Z'-1) :+32越位后要提上去,-('a'-'Z'-1):-ASCll(91-96)
代码为本人自创,想了一个小时多,
查了下ASCll表,不仅有ASCll(91-96)
[我一直以为Z完了就是a,没想到还有ASCll(91-96),吐血],
还有越位问题,更吐血 点个赞支持一下吧
#include <bits/stdc++.h> using namespace std; int main(){ string k,c; char m[1005]; cin>>k>>c; for(int i=0;i<k.size();i++)if(k[i]>='a')k[i]-=32; for(int i=0;i<c.size();i++){ m[i]=(char)(c[i]-k[i%k.size()]+'A'); if(c[i]<='Z'&&m[i]<'A'||c[i]>='a'&&m[i]<'a') m[i]=(char)(c[i]+32-('a'-'Z'-1)-k[i%k.size()]+'A');} for(int i=0;i<c.size();i++)cout<<m[i]; return 0;}
-
1
#include<iostream> using namespace std; int n,m,a[10001],p; string mp[26]; int main() { string keys,s; cin>>keys>>s; int len1=s.length(),len2=keys.length(); for(int i=0;i<len1-len2;i+=1)keys+=keys[i%len2]; mp[0]="abcdefghijklmnopqrstuvwxyz"; for(int i=1;i<=25;i+=1)for(int j=0;j<=25;j+=1)mp[i]+=mp[0][(j-i+26)%26]; for(int i=0;i<len1;i+=1) { int keyi,keyj; if(keys[i]>='a')keyi=keys[i]-'a'; else keyi=keys[i]-'A'; if(s[i]>='a') { keyj=s[i]-'a'; cout<<mp[keyi][keyj]; } else { keyj=s[i]-'A'; cout<<(char)(mp[keyi][keyj]-32); } } }
- 1
信息
- ID
- 543
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 261
- 已通过
- 96
- 上传者