1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 给定n个十六进制正整数 输出对应的八进制数

给定n个十六进制正整数 输出对应的八进制数

时间:2023-07-21 23:33:47

相关推荐

给定n个十六进制正整数 输出对应的八进制数

TOC

进制转换

问题描述

问题描述

给定n个十六进制正整数,输出它们对应的八进制数。

要求

输入格式:输入的第一行为一个正整数n (1<=n<=10)。

接下来n行,每行一个由0-9

、大写字母A~F组成的字符串,表示要 转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式:输出n行,每行为输入对应的八进制正整数。

分析

要将十六进制转换成八进制需要先将十六进制转换成十进制,再将十进制转换为八进制。转换过程如下图:

由十进制转换八进制可以看出先得到的数为低位,所以这里将八进制的数先推入栈中,待得到结果后再依次弹出。

#define _CRT_SECURE_NO_WARNINGS //不定义这个scanf总报错#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define MAXSIZE 1024#define INFINITY 65535//定义一个栈存放八进制数typedef struct SeqStack_1{int data[MAXSIZE];int top;}SeqStack;int IsEmpty(SeqStack* stack) {//判断栈是否为空if (stack->top == -1)return 1;elsereturn 0;}void InitStack(SeqStack* stack) {//栈的初始化stack->top = -1;}void SeqStack_Push(SeqStack* stack, int val) {//将数据压入栈中if (stack->top >= MAXSIZE - 1)return;stack->top++;stack->data[stack->top] = val;}int SeqStack_Pop(SeqStack* stack) {//弹出栈if(!IsEmpty(stack))return stack->data[stack->top--];return INFINITY;//返回无穷大}int main() {int n,len, sum = 0, num, ten;printf("请输入要输入数的个数:");scanf_s("%d ", &n);if (n > 10) {printf("输入参数有误!");return 0;}char a[10][100000];//定义一个二位数组存放字符串int b[10];for (int i = 0; i < n; i++) {//确定要转换的个数scanf("%s", a[i]);}printf("十进制数为:\n");for (int i = 0; i < n; i++) {//取某一个字符串len = strlen(a[i]);for (int j = 0; j < len; j++) {//读取一个字符串中的具体值switch (a[i][j]) {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 = (int)a[i][j]-48; break;//直接强制类型转出的时ASCII码,故减去48}sum = sum + num * (int)pow(16, len - j - 1);//十六进制转化为十进制}b[i] = sum;sum = 0;printf("%d \n", b[i]);}printf("八进制数为:\n");//将十进制转换为八进制SeqStack stack; //定义栈InitStack(&stack);//初始化栈for (int i = 0; i < n; i++) {ten = b[i];while (ten != 0) {//十进制转换至八进制,并将数据压入栈SeqStack_Push(&stack, ten % 8);ten = ten / 8;}while ((&stack)->top >= 0) {printf("%d", SeqStack_Pop(&stack));//依次弹出栈}InitStack(&stack);printf("\n");}return 0;}

运行结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。