/* ACM 446 Kibbles `n' Bits `n' Bits `n' Bits * mythnc * 2011/11/28 10:07:08 * run time: 0.004 */ #include <stdio.h> #include <string.h> #define MAXB 14 #define MAXH 4 #define OPR 2 int hextodec(char *); int atod(char); void dectobin(int, char *); void reverse(char *); int result(int, int, char *); int main(void) { char opd[2][MAXH]; char opr[OPR]; char b[2][MAXB]; int d[2]; int i; scanf("%*d"); while (scanf("%s %s %s", opd[0], opr, opd[1]) == 3) { for (i = 0; i < 2; i++) { d[i] = hextodec(opd[i]); dectobin(d[i], b[i]); reverse(b[i]); } printf("%s %s %s = %d\n", b[0], opr, b[1], result(d[0], d[1], opr)); } return 0; } /* hextodec: hex number change to decimal number */ int hextodec(char *s) { int i, n, mul; mul = 1; for (n = 0, i = strlen(s) - 1; i > -1; i--) { n += mul * atod(s[i]); mul *= 16; } return n; } /* atoh: convert ascii code to decimal number */ int atod(char c) { if (c >= '0' && c <= '9') return c - '0'; return c - 'A' + 10; } /* dectobin: decimal number change to binary form */ void dectobin(int d, char *b) { int i; for (i = 0; d != 0; i++) { b[i] = d % 2 + '0'; d /= 2; } for (; i < MAXB - 1; i++) b[i] = '0'; b[i] = '\0'; } /* reverse: reverse b */ void reverse(char *b) { int i, j; char tmp; for (i = 0, j = strlen(b) - 1; i < j; i++, j--) { tmp = b[i]; b[i] = b[j]; b[j] = tmp; } } /* result: depend on opr, do d1 + d2, * or d1 - d2 */ int result(int d1, int d2, char *opr) { if (strcmp(opr, "+") == 0) return d1 + d2; return d1 - d2; }
20111128
ACM 446 Kibbles `n' Bits `n' Bits `n' Bits
做進位轉換。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言