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);
不知道哪里条件设置出现问题了,菜鸟求大神指点= =
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++ 十进制数转换成任意进制数的主要内容,如果未能解决你的问题,请参考以下文章