C++中十进制如何转换为八进制和十六进制 5

//aa.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<io... // aa.cpp : Defines the entry point for the console application.
//

#include"stdafx.h"
#include<iostream>
#include<cstdlib>
using namespace std;
const int MaxStackSize=50; //栈的大小,即栈中元素的最大个数
//类的声明
template<class T>
class Stack
{
private:
T stacklist[MaxStackSize]; //数组,用于存放栈的元素
int top; //栈顶位置(数组下标)
public:
Stack (void); //构造函数,初始化栈
void Push(const T& item); //将元素item压入栈
T Pop (void); //将栈顶元素弹出栈
void ClearStack(void); //将栈清空
T Peek (void) const; //访问栈顶元素

int StackEmpty(void) const; //测试是否栈满
int StackFull(void) const; //测试是否栈空
};
//类的实现
template<class T>
Stack<T>::Stack (void):top(-1) //构造函数,栈顶初始化为-1
{
}

template<class T>
void Stack<T>::Push (const T& item) //将元素item压入栈
{
if(top==MaxStackSize-1) //如果栈满,程序终止
{
std::cerr<<"Stack overflow!"<<endl;
exit(1);
}
top++; //栈顶指针增 1
stacklist[top]=item; //将新元素压入栈顶
}

template<class T>
T Stack<T>::Pop (void) //将栈顶元素弹出栈
{
T temp;
if(top==-1) //如果栈空,程序终止
{
std::cerr<<"Attempt to pop an empty stack!"<<endl;
exit(1);
}
temp=stacklist[top]; //取出栈顶元素
top--; //栈顶指针自减
return temp; //返回栈顶元素
}

template<class T>
T Stack<T>::Peek (void) const //访问栈顶元素
{
if(top==-1) //如果栈空,程序终止
{
std::cerr<<"Attempt to peek at an empty stack!"<<endl;
exit(1);
}
return stacklist[top]; //返回栈顶元素
}

template<class T>
int Stack<T>::StackEmpty (void) const//测试栈是否空
{
return top==-1; //如果栈空则返回TRUE,否则返回FALSE
}

template<class T>
int Stack<T>::StackFull (void) const //测试是否栈满
{
return top==MaxStackSize-1; //如果栈满则返回TRUE,否则返回FALSE
}

template<class T>
void Stack<T>::ClearStack (void) //清空栈
{
top=-1;
}

void main()
{

Stack<int> myStack;
int i,j=0;
cin>>i;
while(i!=0)
{ myStack.Push(i%8);
i=i/8;
j++;
}

//while(i!=NULL)
for(j;j>=0;j--)
{
cout<<"十进制转换成八进制="<<myStack.Pop()<<endl;

}

}
在主函数中怎样设计?
展开
 我来答
tattackor
2015-09-22 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:862万
展开全部
  1、十进制转换成八进制有两种方法:
  (1)间接法:先将十进制转换成二进制,然后将二进制又转换成八进制。
  (2)直接法:八进制是由二进制衍生而来的,因此可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换,下面来具体讲解一下:
①整数部分
方法:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。
  ②小数部分
方法:乘8取整法,即将小数部分乘以8,然后取整数部分,剩下的小数部分继续乘以8,然后取整数部分,剩下的小数部分又乘以8,一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。
  2、十进制的转换到十六进制:
  十六进制与八进制有很多相似之处,可以参照上面八进制与十进制的转换实现这两个进制之间的转换。
Dogous
2009-05-07 · TA获得超过259个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:158万
展开全部
十进转换为十六进制
////////////////////////////////////
10 进制 -----> 16 进制

int nDec = 10;
CString str;
str.Fomat(_T("%x"), nDec);

十进制转换为八进制:先将十进制转化到2进制,再由2进制到8进制
///////////////////////////////////////

10 进制 -----> 2 进制

CString DecToBin(CString strDec)
{
int nDec = atoi(strDec);
int nYushu, nShang;
CString strBin = _T(""), strTemp;
TCHAR buf[2];
BOOL bContinue = TRUE;

while ( bContinue )
{
nYushu = nDec % 2;
nShang = nDec / 2;
sprintf(buf, "%d", nYushu);
strTemp = strBin;
strBin.Format("%s%s", buf, strTemp);
nDec = nShang;
if ( nShang == 0 )
bContinue = FALSE;
}

int nTemp = strBin.GetLength()%4;
switch(nTemp)
{
case 1:
strTemp.Format(_T("000%s"), strBin);
strBin = strTemp;
break;
case 2:
strTemp.Format(_T("00%s"), strBin);
strBin = strTemp;
break;
case 3:
strTemp.Format(_T("0%s"), strBin);
strBin = strTemp;
break;
default:
break;
}

return strBin;
}

2 进制 -----> 8 进制
#include <stdio.h>
#include <string.h>

/* 以long型占4个字节为例 */
char *decimal2octal(long a)
{
static char res[16];
int i = 0, j = 0;
long t = (long)a;

memset(res, 0x00, sizeof(res));

if((a >> 31) & 0x1) /* 第一位为1则为负数,取补码 */
{
t = ~a + 1;
res[i++] = '-';
}

res[i++] = ((t >> 30) & 0x1) + '0';

/* 每3个二进制位转一个8进制位 */
for(j = 3 ; j <= 30; j += 3)
res[i++] = (t >> (30 - j) & 0x7) + '0';
res[i] = 0x00;

return res;
}

int main()
{
long a = -16;
printf("%s\n", decimal2octal(a));
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式