十六进制转换为十进制(CC++)

xiaoxiao2021-02-28  62

题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串。 输出描述: 输出该数值的十进制字符串。 输入例子: 0xA

输出例子: 10

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

//十六进制转换为十进制 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<math.h> #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 typedef 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; else printf("%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; }

转载请注明原文地址: https://www.6miu.com/read-19334.html

最新回复(0)