十六进制转十进制的C语言实现 Posted on 2018-09-05 | Post modified: 2019-10-16 | In C/C++ Words count in article: 394 | Reading time ≈ 2 嘻嘻,用到了前几天学到的循环队列,认识到了数据结构的魅力。将输入的数据入队后,再挨个出队,首先检查队列的前两个数据是否为‘0x’若是,再将其他数据出队,并且完成一系列操作。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586//————————————————————————//十六进制转十进制(队列)#include <stdio.h> #define maxSize 10int product2(int n);int word2num(char w);int hTod(char a[]);struct xQueue { char data[maxSize]; int front, rear; int length;//表示队列长度};int main() { char a[50]; gets(a); printf("%d\n",hTod(a));}int hTod(char a[]) { char c, b, d; int num = 0, numDem = 0; struct xQueue que; que.front = 0; que.rear = 0; que.length = 0;//初始化循环队列 char *p = a; while (*p != '\0') { if (que.front == (que.rear + 1) % maxSize) return -1;//队列满 else { que.rear = (que.rear + 1) % maxSize; que.data[que.rear] = *p++; que.length++; } } que.front = (que.front + 1) % maxSize; c = que.data[que.front]; que.length--; if (c == '0') { que.front = (que.front + 1) % maxSize; b = que.data[que.front]; que.length--; if (b != 'x') return -2;//表示输入不是十六进制 } else return -2; while (que.front != que.rear) { que.front = (que.front + 1) % maxSize; d = que.data[que.front]; if (d >= 'A' && d <= 'F') num = word2num(d); else if (d >= '0' && d <= '9') num = d - '0'; else return -3;//表示不符合十六进制的格式 que.length--; numDem = numDem + num*product2(que.length); } return numDem;}int word2num(char w) { int num; switch(w) { case 'A': num = 10; break; case 'B': num = 11; break; case 'C': num = 12; break; case 'D': num = 13; break; case 'E': num = 14; break; case 'F': num = 15; break; default:num = -1; } return num;}int product2(int n) { if (n == 0) return 1; else if (n == 1) return 16; else return 16 * product2(n-1);} ------ 本文结束 ------