十六进制转换为十进制(C/C++)

来源:互联网 发布:阿里云备案 固定电话 编辑:程序博客网 时间:2024/05/21 22:52
题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
0xA

输出例子:
10

方法1:运用进制之间转换的关系,采用了进栈出栈来处理,比较复杂,主要目的是复习一下数据结构的知识。

//十六进制转换为十进制#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<math.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10typedef char ElemType;typedef struct//顺序栈的定义{ElemType *base;ElemType *top;int stackSize;}sqStack;void InitStack(sqStack *s)//初始化栈{s->base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));if (!s->base){exit(0);}s->top = s->base;s->stackSize = STACK_INIT_SIZE;}void Push(sqStack *s, ElemType e)//压栈{if (s->top - s->base >= s->stackSize){s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT)*sizeof(ElemType));if (!s->base){exit(0);}s->top = s->base + s->stackSize;s->stackSize += STACKINCREMENT;}*(s->top) = e;s->top++;}void Pop(sqStack *s, ElemType *e){if (s->top == s->base){return;}*e = *--(s->top);}int StackLen(sqStack s)//不作修改,传入结构即可,不需传入指针{return (s.top - s.base);//得到栈中元素的个数}int main(){ElemType c;while(scanf("%c", &c)){sqStack s;int len, i, sum = 0;InitStack(&s);//scanf("%c", &c);while (c != '\n'){Push(&s, c);scanf("%c", &c);}len = StackLen(s);for (i = 0; i < len - 2; i++){Pop(&s, &c);if (c >= 48 && c <= 57)c = c - 48;else if (c >= 65 && c <= 70)c = c - 55;else if (c >= 97 && c <= 102)c = c - 87;elseprintf("%s\n", "非法字符");sum = sum + c * pow(16, i);}printf("%d\n", sum);}system("pause");return 0;}


方法2:在网上看到的一个技巧运用,采用输入输出流的方法,很巧妙

#include<iostream>using namespace std;int main(){    int a;    while(cin>>hex>>a)        cout<<a<<endl;}




原创粉丝点击