找不到错误

孤远无梦 2020-10-20 03:31:13
#include <iostream>
using namespace std;
class stack {
private:
int maxsize;
int top;
int* st2;

public:
~stack()
{
delete[]st2;
}

stack(int size)
{
maxsize = size;
st2 = new int[maxsize];
top = -1;
}

void push(int num)
{
st2[++top] = num;
}

void pop()
{
int item;
while (top != -1) {
item = st2[top--];
cout << item;
}
}
};

/*
TODO:设计算法把一个十进制整数转换为二至九进制之间的任意进制数输出。
其中,n为要转换的10进制整数, m为进制,取值为2到9。
提示:利用栈解决
*/
void Binaryconv(int n, int m) //进制转换
{
stack s(32);
int a = n, b = 0;
while (a > 0)
{
a = n;
b = a % m;
a = a / m;
s.push(b);
}
cout << "整数" << n << "转成" << m << "进制后的结果是:";
s.pop();
}
int main()
{
int n, m;
cin >> n;
cin >> m;
Binaryconv(n, m);
return 0;
}


...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤远无梦 2020-10-20
  • 打赏
  • 举报
回复
引用 1 楼 lin5161678 的回复:
while (a > 0) { a = n; b = a % m; a = a / m; s.push(b); } n不变 则a不变 则a/m不变 则死循环 则无限push 则越界 则引发异常
引用 3 楼 自信男孩 的回复:
 while (a > 0)
    {
        a = n;   //这条语句为什么要在这里赋值,在while外已经赋值了。因为n没有做修改,因此每次a都会被赋值初始值,这样就会导致死循环。
        b = a % m;
        a = a / m;
        s.push(b);
    }
糊涂了,谢谢大佬
自信男孩 2020-10-20
  • 打赏
  • 举报
回复
 while (a > 0)
{
a = n; //这条语句为什么要在这里赋值,在while外已经赋值了。因为n没有做修改,因此每次a都会被赋值初始值,这样就会导致死循环。
b = a % m;
a = a / m;
s.push(b);
}
lin5161678 2020-10-20
  • 打赏
  • 举报
回复
哦 漏了m不变
lin5161678 2020-10-20
  • 打赏
  • 举报
回复
while (a > 0) { a = n; b = a % m; a = a / m; s.push(b); } n不变 则a不变 则a/m不变 则死循环 则无限push 则越界 则引发异常

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧