TOJ 244
題目
https://toj.tfcis.org/oj/pro/244/
將輸入的字串中小寫轉大寫,大寫轉小寫
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<iostream> using namespace std; int main(){ int n; string s; cin>>n>>s; for(int i=0 ; i<s.size() ; i++){ if(s[i]<='Z'){ cout<<(char)(s[i]-'A'+'a'); } else cout<<(char)(s[i]-'a'+'A'); } cout<<"\n";
return 0; }
|
想法2
觀察一下 ASCII Table,會發現到 a
以及 A
之間剛好差了 $32$
並且將其對應到的數字轉換成二進位後會發現到它們只在第五個 bit是不同的
也就是說我們要做大小寫轉換,只需要反轉第五個 bit 即可
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<iostream> using namespace std; int t, x = (1<<5); string s; int main(){ cin>>t; cin>>s; for(int i=0 ; i<t ; i++){ cout<<(char)((int)s[i]^x); } cout<<"\n"; return 0; }
|
複雜度分析
總時間複雜度為 $O(n)$