A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /**
  2. @author Admin

  3. 需求:定义一个功能,将十进制转换成八进制。计算出60的八进制是多少?
  4. 思路:
  5. 1,封装一个功能,将一个十进制数作为参数传递给函数,可以直接在主函数调用并计算60的八进制是多少。
  6. 2, 三个二进制位代表一个八进制位,则以三位作为一组进行运算。
  7. */



  8. class DemoOct
  9. {
  10.         public static void toOct(int num)
  11.         {
  12.                 StringBuffer sb = new StringBuffer();
  13.                 while(num>0)
  14.                 {
  15.                         int temp = num%7;
  16.                         sb.append(temp);
  17.                         num = num>>>3;
  18.                 }
  19.                 System.out.println(sb.reverse());
  20.        
  21.         }
  22.         public static void main(String[] args)
  23.         {
  24.                 toOct(8);
  25.         }
  26. }
复制代码
不知道我的思路对不对?反正运行起来得出错误的结果,求指点啊

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1 去新板块提问吧

查看全部评分

7 个回复

倒序浏览
我的思路是,先转成16进制,再转八进制就很容易了
回复 使用道具 举报
一、问题:利用栈实现将十进制转为八进制。
二、思路:定义一个Stack类,定义一个数组arr存放栈元素,sp为栈顶指示器,count为栈的大小,定义方法实现入栈、出栈、判断栈空、和初始化栈。
三、主要代码:
1、栈实现代码:
public class Stack //栈模型的实现
    {
        private int[] arr; //栈元素分配的空间
        private int sp;  //栈顶指示器
        private int count;
        public Stack(int Length) //初始化栈
        {
            count = Length;
            sp = 0;
            arr = new int[Length];
        }
        public Stack() //初始化栈重载
        {
            count = 10;
            sp = 0;
            arr = new int[10];
        }
        public void Push(int e) //进栈
        {
            if (sp >= count) MessageBox.Show("栈已满,无法压栈");
            else
            {
                arr[sp] = e;
                sp++;
            }
        }
        public int Pop()  //出栈,取栈顶元素
        {
            int e;
            if (sp <= 0)
            {
                MessageBox.Show("栈空,无法出栈");
                return 0;
            }
            else
            {
                sp--;
                e = arr[sp];
                return e;
            }
        }
        public bool StackEmpty() //判断栈是否为空?
        {
            if (sp <= 0) return true;
            else return false;
        }
    }
2、单击事件代码:

        private void button1_Click(object sender, EventArgs e)
        {
            Stack s = new Stack();
            int N = int.Parse(txtNum1.Text);
            while (N!=0)
            {
                s.Push(N % 8);
                N = N / 8;
            }
            string result="";
            while(!s.StackEmpty())
                result+=s.Pop().ToString();
           // if (result == "") label3.Text = "kong";
            txtNum2.Text = result;
        }

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
int temp = num%7;干嘛对7取模呢,既然是八进制当让对8取,让后在操作
回复 使用道具 举报
第十九行这里应该&7,而不是和7取摸。因为后面还要向右移动三位,和7取模后变化的位数可能不止3位,移动是没意义的。
回复 使用道具 举报
思路没问题 只是19行代码  int temp = num%7;(改为:  int temp = num%8;)
其实可以不用定义局部变量temp,直接把 num%8当成参数传给sb.append();就好了

十进制转成几进制就应该对“几”取模,无论是十六进制、二进制还是八进制都是一样的

看过毕老师视频的应该都知道吧 里面讲过十进制转二进制和十进制转十六进制的例子

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
卜弦 发表于 2013-10-10 08:55
第十九行这里应该&7,而不是和7取摸。因为后面还要向右移动三位,和7取模后变化的位数可能不止3位,移动是 ...

取模也行的 不过是对8取模 右移三位即是除以8 所以只要把19行代码的7改为8也是可以实现的 当然像你说的&7也是可以的
回复 使用道具 举报
卜弦 中级黑马 2013-10-10 09:50:14
8#
ixiangfeng 发表于 2013-10-10 09:14
取模也行的 不过是对8取模 右移三位即是除以8 所以只要把19行代码的7改为8也是可以实现的 当然像你说的&7 ...

:handshake有道理!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马