一、正整数的转换介绍?
正整数换为二进制是不断求余数和整除的
例如:正整数转为二进制
10%2=0,0进入栈里,10/2=5
5%2=1,1进入栈里,5/2=2
2%2=1,1进入栈里,2/2=1
1%2=1;1进入栈里,1/2=0
例如:正整数转为八进制
10%8=2,2进入栈里,10/8=1
1%8=1,1进入栈里,1/8=0
正整数转为十六进制时余数大于10是字母abcde
对应ASCLL码表,当把余数大于10时减去11加上‘a'用整数来入栈
出栈时在用char类型来接收,用(char)来强制转换
例如: int a1;
13%16=13,a1=13-11+’a',a1来入栈
char val=char(a1),把a1打印出来
二、使用步骤
1.用的头文件
代码如下(示例):
#include<stdio.h>
using namespace std;
#include<iostream>
#include<stdlib.h>
#include<assert.h>
2.读入数据
代码如下:
#include<stdio.h>
using namespace std;
#include<iostream>
#include<stdlib.h>
#include<assert.h>
#ifndef STACK_H
#define STACK_H
typedef int Type;
#define STACK_SIZE 10//栈的最大大小
typedef struct Stack//栈的结构体声明
{
//数据域
Type data[STACK_SIZE];
//栈顶元素下标
int top;
}stack;
//栈的函数功能声明
//栈的初始化
stack* stack_init();
//入栈
void stack_push(stack* st, Type val);
//出栈
void stack_pop(stack* st);
//获取栈顶元素
Type stack_top(stack* st);
//判断栈是否为空
bool stack_empty(stack* st);
//判断栈是否满了
bool stack_full(stack* st);
//十进制转为二进制
void Ten_er(stack* st, Type val);
//十进制转为八进制
void Ten_b(stack* st, Type val);
//十进制转为十六进制
void Ten_L(stack* st, Type val);
#endif
int main()
{
//十进制数转换成二进制输出 栈的特性
//创建栈
//把十进制转二进制取得的余数放入栈中输出
Type n = 0;
Type val = -1;
stack* st = stack_init();//创建栈
cout << "1.是十进制转为二进制\n";
cout << "2.是十进制转为八进制\n";
cout << "3.是十进制转为十六进制\n";
cout << "0.是结束转换\n";
cin >> n;
while (n) {
switch (n)
{
case 1:
Ten_er(st, val);
cout << endl;
break;
case 2:
Ten_b(st, val);
cout << endl;
break;
case 3:
Ten_L(st, val);
cout << endl;
break;
}
cin >> n;
}
return 0;
}
stack* stack_init()
{
stack* temp = (stack*)malloc(sizeof(stack));
assert(temp);//弹出错误窗口
temp->top = -1;//初始化栈顶元素下标为-1,-1栈中没有元素
return temp;
}
//入栈
void stack_push(stack* st, Type val)
{
assert(st);//判断栈是否存在
//判断栈是否满了
assert(!stack_full(st));
//从栈顶插入元素
st->data[++st->top] = val;
}
//出栈
void stack_pop(stack* st)
{
assert(st);//判断栈是否存在
//判断栈是否为空
assert(!stack_empty(st));
//记录当前栈顶元素
Type val;
for (; st->top > -1;)
{
val = st->data[st->top];
if (val > 10) {
char va1 = (char)val;
cout << va1;
st->top--;
}
else {
cout << val;
st->top--;
}
}
}
//获取栈顶元素
Type stack_top(stack* st)
{
assert(st);//判断栈是否存在
//判断栈是否为空
assert(!stack_empty(st));
return st->data[st->top];
}
//判断栈是否满了
bool stack_full(stack* st)
{
return st->top >= STACK_SIZE;
}
//判断栈是否为空
bool stack_empty(stack* st)
{
return st->top == -1;//栈空了
}
//十进制转为二进制
void Ten_er(stack* st, Type val) {
printf("请输入一个正整数:\n");
//输入一个正整数
cin >> val;
for (int i = val; i > 0; i /= 2)
{
//将得到的余数入栈
stack_push(st, i % 2);
}
printf("正整数%d的二进制形式为:\n", val);
while (!stack_empty(st))
{
//二进制依次出栈
stack_pop(st);
}
}
//十进制转为八进制
void Ten_b(stack* st, Type val) {
printf("请输入一个正整数:\n");
//输入一个正整数
cin >> val;
for (int i = val; i > 0; i /= 8)
{
//将得到的余数入栈
stack_push(st, i % 8);
}
printf("正整数%d的二进制形式为:\n", val);
while (!stack_empty(st))
{
//十进制依次出栈
stack_pop(st);
}
}
//十进制转为十六进制
void Ten_L(stack* st, Type val) {
printf("请输入一个正整数:\n");
//输入一个正整数
cin >> val;
for (int i = val; i > 0; i /= 16)
{
//将得到的余数入栈
if (i % 16 > 10) {
Type a1 = i % 16 - 10 + 'a';
stack_push(st, a1);
}
else {
stack_push(st, i % 16);
}
}
printf("正整数%d的十六进制形式为:\n", val);
while (!stack_empty(st))
{
//十六进制进制依次出栈
stack_pop(st);
}
}
总结
这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了正整数的转换