第一次寫部落格,分享下一個巧妙演算法
阿新 • • 發佈:2019-01-22
問題描述:
如何將一個字串,如“123ABC”(其字串每個字元是十六進位制的一個數),將其轉化為二進位制,並按位取反,再轉化為十六進位制,輸出。
問題很簡單,按照簡單邏輯我們可以照著題目思路走下去,程式設計能力不錯的同學可以直接實現。
但如果考慮到xxxx 的按位取反就是(1111 - xxxx)及我們可以用一個數組跟下標來處理。
話不多說,程式碼如下
#include<stdio.h> void main(void) { char str[80]; char res[80] = {0}; int i; int t = 0; gets(str); for(i = 0; str[i]; i++) { res[t++] = ("FEDCBA987654321")[str[i] <= '9' ? str[i] - '0' : str[i] - 'A' + 10]; } puts(res); }
但如果考慮到陣列跟指標本質的關係即a[i] <=> (i)[a],那麼下面程式碼就更騷了
#include<stdio.h>
void main(void) {
char str[80];
char res[80] = {0};
int i;
int t = 0;
gets(str);
for(i = 0; str[i]; i++) {
res[t++] = (str[i] <= '9' ? str[i] - '0' : str[i] - 'A' + 10)["FEDCBA987654321"];
}
puts(res);
}