1. 程式人生 > >第一次寫部落格,分享下一個巧妙演算法

第一次寫部落格,分享下一個巧妙演算法

問題描述:

如何將一個字串,如“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);
}