C++ 十进制数转换成任意进制数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 十进制数转换成任意进制数相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;
const int StackSize=1024;
class Seqstack
public:
Seqstack()top=-1;//构造函数,初始化空栈
void Push(int x);//入栈
int Pop();//出栈
bool Empty();//判别栈是否为空
void Trans(int Num,int N);//函数功能:将十进制的数Num转换为N进制

private:
int data[StackSize];//定义数组
int top;//栈顶指针
;
void Seqstack::Push(int x)
if(top>=StackSize-1)throw"上溢";
top++;
data[top]=x;
int Seqstack::Pop()
if(Empty())throw"下溢";
top--;
return data[top+1];
bool Seqstack::Empty()
if(top==-1)return 1;
else return 0;
void Seqstack::Trans(int Num, int N)
int k;
while(Num)
k=Num%N;
Push(k);
Num=Num/N;
while(!Empty())
k=Pop();
if(k<10)cout<<k;
else cout<<char(k+55);

void main()
int Num,N;
Seqstack s;
cout<<"将十进制数Num转换成N进制输出,请输入Num,N"<<endl;
cin>>Num>>N;
while(Num)
s.Trans(Num,N);

不知道哪里条件设置出现问题了,菜鸟求大神指点= =

while(Num)
s.Trans(Num,N);
主函数里面这句
为什么要用while呢?
Num数值并没有传回,也就是Num没变,这个死循环了
如果想Trans里面的值传回 用int &Num做参数
void Trans(int &Num,int N);//函数功能:将十进制的数Num转换为N进制
不过觉得没比要的
退出这个函数的时候,Num肯定是0了,传回来没意义
你把这个while去掉 直接调
s.Trans(Num,N);
应该就ok了追问

我去掉了while,直接调用也还是死循环,是不是Trans这个函数有问题?

追答

怎么会呢 

我这边测试是好的

我的完整程序 

你看下和你的有什么区别

我印象中只改了IDE相关头文件和注释while

#include<iostream>
using namespace std;
const int StackSize=1024;
class Seqstack
public:
       Seqstack()top=-1;//构造函数,初始化空栈
  void Push(int x);//入栈
  int Pop();//出栈
  bool Empty();//判别栈是否为空
  void Trans(int Num,int N);//函数功能:将十进制的数Num转换为N进制
  
 private:
  int data[StackSize];//定义数组
  int top;//栈顶指针
;
void Seqstack::Push(int x)
if(top>=StackSize-1)throw"上溢";
 top++;
 data[top]=x;
int Seqstack::Pop()
if(Empty())throw"下溢";
 top--;
 return data[top+1];
bool Seqstack::Empty()
if(top==-1)return 1;
 else return 0;
void Seqstack::Trans(int Num, int N)
int k;
 while(Num)
 k=Num%N;
  Push(k);
  Num=Num/N;
 while(!Empty())
 k=Pop();
  if(k<10)cout<<k;
  else cout<<char(k+55);

int main()
int Num,N;
 Seqstack s;
 cout<<"将十进制数Num转换成N进制输出,请输入Num,N"<<endl;
 cin>>Num>>N;
// while(Num)
  s.Trans(Num,N);

运行结果

$g++ bd.c -o 1 -Wall

$./1

将十进制数Num转换成N进制输出,请输入Num,N

100 2

1100100

$./1

将十进制数Num转换成N进制输出,请输入Num,N

100 16

64

$./1

将十进制数Num转换成N进制输出,请输入Num,N

100 8

144

追问

我的版本是VS2005,代码完全一样的,输出的数值是对的,但是就是无限循环的重复输出,没有终止

追答

还有这样的事情 你确定编译运行的是修改后的文件吗?

几个方式你可以试一下

    在原来代码基础上 Trans 结尾加一个打印信息,看是否退出了Trans

    在这个打印后 加一个exit(0)或者while(1) 强制程序停在这里

如果还没效果 依旧死循环 那么只能猜是环境问题了

不过 强烈怀疑你没有执行修改后的代码,而是一直运行的之前的

参考技术A 你的代码,真的太复杂了

你看看我的,多组数据,十进制n转换r进制

#include<stdio.h>
int main()

int n,r,a[1000],t,f;
while(scanf("%d%d",&n,&r)==2)

t=-1;f=0;
if(n==0)printf("0\n");
else

if(n<0)f=1,n=-1*n;
while(n!=0)a[++t]=n%r;n/=r;
if(f==1)printf("-");
while(t>=0)
if(a[t]>=10)printf("%c",a[t]-10+'A');
else printf("%d",a[t]);t--;

printf("\n");




短吧,望采纳
参考技术B 觉得你写复杂了,提供一个作参考……
//#include "stdafx.h"//vc++6.0加上这一行.
#include "string.h"
#include "iomanip.h"
void Itob(int n,char s[],int b)
char cx,i;
for(i=0;;i++)
cx=n%b;
s[i]=cx+(cx>=0 && cx<=9 ? '0' : 0x37);
n/=b;
if(n==0 && cx==0) break;

s[i]=NULL;
strcat(s,b==2 ? ")B(" : b==8 ? "O" : b==16 ? "x0" : "");
strrev(s);

void main(void)
char p[20];
int n,b;
cout << "请输入一个十进制整数...\nn=";
cin >> n;
cout << "请输入要转换成的进制数(2~16)...\nb=";
cin >> b;
Itob(n,p,b);
cout << "输入的十进制数是 " << n << ".\n" << "转换成 " << b << " 进制是 " << p << ".\n";
参考技术C 兄弟,你这个程序不太现实啊,你要是想用个1000进制数输出,你上哪找那么多字母表示1000进制的一个位上的数?追问

主要用来测试2,8,16的,不要在意那些细节= =

追答//不知道第一次提交为什么没成功。。。。。。。
#include <stdio.h>
void print(int n)

if(n>-1&&n<10)

printf("%c",'0'+n);

else if(n<36)

printf("%c",'a'+n-10);


void trans(int n,int k)//你是要转换的数,k是进制

if(n>0)

trans(n/k,k);
print(n%k);

void main()

    trans(355,16);


八进制数26转换成转换成十进制数是多少。要过程。

我算出来22,可是同学算出来134,我也不知道哪个对

参考技术A 八进制26转化成10进制,为:
2×8^1+6×8^0=16+6=22

22是对的
参考技术B 2*8+6=22
理解权的概念就好了
比如十进制数 258 2的权是10^2 5的权是10^1 8的权是10^0
258 =2*10^2+5*10^1+8*10^0
八进制数26
2的权是8^1 6的权是8^0
26=2*8^1 +6*8^0
所有进制的数转十进制数都是一样的 只需乘以相应的权位
参考技术C 2×8^1+6×8^0=16+6=24

对于任意数ABC 的n进制换算为十进制
方法都是A*n^2+b*n^1+c*n^0
参考技术D 2*8^1+6*8^0=16+6=22

是么0.0
第5个回答  2010-09-10 八进制数26
= 2(8)^1 + 6
= 16 +6
= 22本回答被提问者采纳

以上是关于C++ 十进制数转换成任意进制数的主要内容,如果未能解决你的问题,请参考以下文章

任意十进制数转换成ASCII码C语言程序

进制转换,请将一个n进制的数转换成m进制的数,并输出.

八进制数26转换成转换成十进制数是多少。要过程。

C语言练习题|将 10 进制数转换成任意进制的数

求2^k进制数C++语言,带解释。。。。。。。

求c语言将十进制数转换为16进制的函数