参考文章:
http://blog.csdn.net/sxhelijian/article/details/17167291
原理:
1、按位打印字符,并用32位整型来压缩.(十六进制表示)
2、位操作: 0 & x = 0, 1 | x = 1. 位状态的反转
3、轴对称的利用
#include <iostream> using namespace std; //digit table int heart[21] = { 0x420, 0x4004, 0x10000, 0x40000, 0x100000, 0x200000, 0x600000, 0x200000, 0x100000, 0x40000, 0x8000, 0x800, 0x100, 0x10, 0x4, 0x1 }; //reverse bit status int bitReverse(int n) { int sum = 0, tempBit; for (int i = 0; i < 32; ++i) { tempBit = n % 2; n /= 2; sum <<= 1; if (tempBit == 0) { sum &= 0xfffffffe; } else { sum |= 0x1; } } return sum; } //print character according to given value void printPixel(int n) { if (0 == n) cout << " "; else cout << "$"; } //obtain bit status, and print void print(int num) { for (int j = 0; j < 32; ++j) { printPixel(num % 2); num /= 2; } } int main(int argc, char const *argv[]) { for (int i = 1; i <= 21; ++i) //Row control { //axial symmetry int temp = bitReverse(heart[i-1]); print(temp); switch(i) { case 4: case 3: cout << "$"; break; } //axial operation print(heart[i - 1]); cout << endl; } return 0; }
原文:http://blog.csdn.net/tbz888/article/details/19488729