网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月21日漏签0天
c++吧 关注:629,655贴子:2,113,604
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 8回复贴,共1页
<<返回c++吧
>0< 加载中...

【求助】关于栈的,利用栈进行进制数转换,谢谢啊!!!!

  • 只看楼主
  • 收藏

  • 回复
  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个程序只能对非零的数进行数值准换,而输入0时则不会显示了。
于是进行了修改,但改后所有的数值转换都不再显示了,求解啊!!!!!!!!


  • HGtz2222
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你改错了呗......


2025-08-21 02:40:58
广告
不感兴趣
开通SVIP免广告
  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是改后的
# include <iostream>
using namespace std;
typedef struct snode
{
int data;
struct snode *next;
}LinkSTACK;
LinkSTACK *top;
//初始化
void initSTACK(LinkSTACK **top)
{
*top=(LinkSTACK *)malloc(sizeof(LinkSTACK));
(*top)->next=NULL;
}
//压栈运算
int Push(LinkSTACK **top,int x)
{
LinkSTACK *s;
s=(LinkSTACK *)malloc(sizeof(LinkSTACK));
s->data=x;
s->next=(*top)->next;
(*top)->next=s;
return 1;
}
//判断栈空
int empty(LinkSTACK **top)
{
return ((*top)->next==NULL?1:0);
}
//出栈运算
int Pop(LinkSTACK **top,int *x)
{
LinkSTACK *s;
if(empty(top))
{
printf("\n 栈为空!");
cout<<endl;
return 0;
}
s=(*top)->next;
*x=s->data;
(*top)->next=s->next;
free(s);
return 1;
}
//取栈顶元素
int gettop(LinkSTACK **top,int *x)
{
if(empty(top))
{
printf("\n 栈为空!");
cout<<endl;
return 0;
}
*x=(*top)->next->data;
return 0;
}
//进制数转换*************************
void DecToOthers(int n,int b)
{
char B[]="0123456789ABCDEF";
int x;
LinkSTACK l,*t;
t=&l;
initSTACK(&t);
if(n=0)
{
Push(&t,n);
}
else
{
while(n)
{
Push(&t,n%b);
n=n/b;
}
}
while(!empty(&t))
{
Pop(&t,&x);
printf("%c",B[x]);
}
}
int main()
{
LinkSTACK l1,*t;
t=&l1;
initSTACK(&t);
int a,b;
cout<<"请输入要压栈的元素个数:";
cin>>a;
for(int i=0;i<a;i++)
{
int a1;
cout<<"请输入所要压入的元素:";
cin>>a1;
Push(&t,a1);
}
gettop(&t,&b);
cout<<"栈顶元素为:"<<b<<endl;
cout<<"从栈顶依次取出元素:";
for(i=0;i<a;i++)
{
int n;
Pop(&t,&n);
cout<<n<<" ";
}
cout<<endl;
char ch;
do
{
int c,d;
cout<<"请输入想转换的进制数及转换成何种进制(依次输入,两者之间按空格键):";
cin>>c>>d;
cout<<c<<"的"<<d<<"进制数为:";
DecToOthers(c,d);
cout<<endl;
cout<<"是否要继续进行数值转换(按y继续,其他结束):";
cin>>ch;
}
while(ch=='y');
return 0;
}


  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复2楼:
那请你帮我看一下,行吗?


  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是进制数转换函数改前的部分
//进制数转换*************************
void DecToOthers(int n,int b)
{
char B[]="0123456789ABCDEF";
int x;
LinkSTACK l,*t;
t=&l;
initSTACK(&t);
while(n)
{
Push(&t,n%b);
n=n/b;
}
while(!empty(&t))
{
Pop(&t,&x);
printf("%c",B[x]);
}
}


  • HGtz2222
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
*top=(LinkSTACK *)malloc(sizeof(LinkSTACK));
...........这能过编译咩............


  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复6楼:
这个我也不太懂,不过在这个环境中确实能编译,没有出错(这是书上的,我直接抄的)。


  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复7楼:
但老湿明确指出要用链栈啊


2025-08-21 02:34:58
广告
不感兴趣
开通SVIP免广告
  • 夕醉昔梦
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不好意思!
这个问题我已经解决,将while循环改成do...while循环即可。
至于我最初改的错误何在,暂不明确。还有待考虑!


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示