-1

可能重复:
十进制转换错误

我正在为一个班级编写一个程序,并且无法弄清楚如何将八进制数转换为十进制数。到目前为止,这是我一直在尝试做的事情:

   import java.util.Scanner;

public class test   
{ 
public static void main ( String args[])
{
    Scanner input = new Scanner(System.in);

    System.out.print("Enter number: ");
    int oct  = input.nextInt();
    int d2count = 0;
    int result=0;
    int d3count = 0;
    int d3 = 0;
    int d2 = 0;

    d3 = oct;
    d2 = oct;

    if(oct < 1000){
    while ( d3 >= 100){
    d3 = d3 - 100;
        d3count++;
    }}

    if (oct < 100){
    while ( d2 >= 10){
    d2 = d2 - 10;
        d2count++;
    }}

    result = (d3count * 64)+(d2count * 8) + d2;
System.out.printf("%d\n",result);
}
}

所以基本上我需要一种方法将数字减少到个位数(即 1337 到 1、3、3、7)。我真的很想用我现在拥有的东西来做,但是我的做事方式似乎有一些我看不到的错误。如果我输入一个小于 100 的数字,它实际上可以工作,但是当我输入一个大于 100 的数字时,转换会在某处搞砸。我是java新手,所以技术越基础越好,谢谢

4

4 回答 4

4

以下将十进制转换为八进制,

导入 java.util.Scanner;

public class test { 
    public static void main ( String args[]) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter number: ");
        int oct  = input.nextInt();
        String result= Integer.toString(oct,8);
        System.out.println(result);
    }
}

以下将八进制转换为十进制,

public static void main ( String args[]) {
     Scanner input = new Scanner(System.in);
     System.out.print("Enter number: ");
     String oct  = input.next();
     int result= Integer.parseInt(oct,8);
     System.out.println(result);
 }

以下是从八进制转换为十进制的更算法的方式,

     public static int convert(String oct) {
         int i= 0;  
         for(int j = 0; j < oct.length(); j++) { 
                char num = oct.charAt(j);           
                num -= '0';     
                if(num<0||num>7) {          
                    sysout("invalid number");
                    return -1;
                }
                i *= 8;                          
                i += num;                      
            }
            return i;
        }
     }

以下是用于将十进制转换为八进制,

public static int convert(int OctalNumber){
   int counter=0;
   int result = 0;
   while(OctalNumber !=0) {
        int temp = (int) ((OctalNumber%8) * Math.pow(10, counter));
        counter++;
        result += temp;
        OctalNumber /= 8;
    }
    return result;
}
于 2012-10-30T20:35:37.057 回答
0

首先,您的代码将八进制转换为十进制。

其次,你有

if(oct < 1000){

if (oct < 100){

但是您没有if声明来处理输入数字大于 1000 的情况。

编辑:我刚刚意识到这真的不是问题。当您开始计算 d2 时,您需要在减去 100 多次后使用 d3的最终值。所以在第二个之前,如果你需要一个

d2 = d3;

不过,您仍然需要处理大于 1000 的输入。

于 2012-10-30T20:41:11.723 回答
0

使用班次功能。而不是使用 <1000 等。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

于 2012-10-30T20:44:11.383 回答
0

您可以使用一些更好的算法,该算法允许任何合理长度的十进制数(即不会导致溢出):

public int octalToDecimal(int octal)
{         
   int numDigits = Integer.toString(octal).length();
   int decimalResult = 0;
   int mask = 0x00000007;
   for(int i = 0; i < numDigits; i++)
   {
      int octalDigit = octal & mask;
      octal = octal >> 3;    
      decimalResult += octalDigit * Math.pow(8, i);
   }

   return decimalResult;
}
于 2012-10-30T20:57:46.547 回答