我正在写一个程序,可以将八进制数转换为十进制数。它可以正确地编译所有东西,但是我的转换代码有很大的错误。这对我来说似乎是完美的逻辑,但不知何故,当我运行程序时,转换是错误的(例如,1转换为36),有人能指出哪里出了问题吗?
public static int convert(int octal)
{
int d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0;
if(octal >=9999999){
d8 = (octal-(octal%10000000));}
if(octal >=999999){
d7 = (octal-(octal%1000000));}
if(octal >=99999){
d6 = (octal-(octal%100000));}
if(octal >=9999){
d5 = (octal-(octal%10000));}
if(octal >= 999){
d4 = (octal-(octal%1000));}
if(octal >= 99){
d3 = (octal-(octal%100));}
if(octal >= 9){
d2 = (octal-(octal%10));}
if(octal >= 0){
d1 = (octal-(octal%1));}
octal = (d8 * 8^7) + (d7 * 8^6) + (d6 * 8^5) + (d5 * 8^4) + (d4 * 8^3) + (d3 * 8^2) + (d2 * 8^1) + (d1 * 8^0);
return octal;
}这只是我的转换方法,我的主要方法是收集整数;
发布于 2012-10-31 00:01:07
这就是问题:
8^7^ operator并不会像你想象的那样工作。它做二进制XOR运算。
然而,我要说的是,整个设计显然是可疑的。int值不是"in“八进制或任何其他基数-它只是一个整数。数字10就是数字10,无论它是十进制的"10“,十六进制的"A”还是八进制的"12“。如果您有一个要解析为八进制数字的字符序列,则该方法的输入应该是String,而不是int。
发布于 2012-10-31 00:50:12
由于您的方法接受一个整数(通常在字符串中表示为十进制),并且您输出的也是一个整数,因此您并没有真正转换为“八进制整数”,而是将其完全更改为其他一些整数。您试图正确地将整数转换为八进制数,然后错误地将该八进制数解释为小数。
如果希望将一个整数转换为它的八进制字符串表示形式,您可以简单地使用以下方法:
public static String convert(int number) {
Integer.toOctalString(number);
}而且,如果您真的想返回一个int来表示被解析为十进制的八进制字符串,您可以简单地这样做:
public static int convert(int number) {
return Integer.parseInt(Integer.toOctalString(number));
}发布于 2012-10-31 00:18:52
如果你有重复的代码,你可以考虑一个循环。
public static void main(String... args) {
for (long i = 7, j = 7; i > 0; i = i * 10 + 1, j = j * 8 + 1) {
long c = convert(i);
if (c != j)
throw new AssertionError(i + ": " + c + " != " + j);
System.out.println(i + " = > " + j);
}
}
public static long convert(long octal) {
long ret = 0;
for (long i = 1000000000000000000L, j = 1L << (3 * 18); i > 0; i /= 10, j >>= 3)
ret += j * (octal / i % 10);
return ret;
}打印
7 = > 7
71 = > 57
711 = > 457
7111 = > 3657
71111 = > 29257
711111 = > 234057
7111111 = > 1872457
71111111 = > 14979657
711111111 = > 119837257
7111111111 = > 958698057
71111111111 = > 7669584457
711111111111 = > 61356675657
7111111111111 = > 490853405257
71111111111111 = > 3926827242057
711111111111111 = > 31414617936457
7111111111111111 = > 251316943491657
71111111111111111 = > 2010535547933257
711111111111111111 = > 16084284383466057
7111111111111111111 = > 128674275067728457https://stackoverflow.com/questions/13142977
复制相似问题