Java 不需要将二进制转换为十进制的输出?
给定一个二进制数作为输入,将其转换为10进制(十进制)。请注意,要将数字100111从二进制转换为十进制,其值为1*2^5+0*2^4+0*2^3+1*2^2+1*2^1+1*2^0。还要注意这里的5是二进制数的长度 MyApproach 要转换为十进制,我首先将代码从字符串转换为十进制。然后我求解数字,直到它大于0,并求解表达式 例如,对于数字10=0*2^0+1*2^1,求出了代码中的表达式 我在最后一个测试用例中得到了错误的Ans。 有人能告诉我我的密码有什么问题吗 下面是我的代码:Java 不需要将二进制转换为十进制的输出?,java,string,Java,String,给定一个二进制数作为输入,将其转换为10进制(十进制)。请注意,要将数字100111从二进制转换为十进制,其值为1*2^5+0*2^4+0*2^3+1*2^2+1*2^1+1*2^0。还要注意这里的5是二进制数的长度 MyApproach 要转换为十进制,我首先将代码从字符串转换为十进制。然后我求解数字,直到它大于0,并求解表达式 例如,对于数字10=0*2^0+1*2^1,求出了代码中的表达式 我在最后一个测试用例中得到了错误的Ans。 有人能告诉我我的密码有什么问题吗 下面是我的代码: pu
public int convert(String binary)
{
int p=0;
int decimal=0;
int number=Integer.parseInt(binary);
while(number>0)
{
int temp = number%10;
decimal += temp*Math.pow(2, p);
number = number/10;
p++;
//write your code here
}
return decimal;
}
}
Parameters ActualOutput ExpectedOutput
'10011010010' null 1234
您的输入超出了Java中的
int
限制,即2147483647
。
即使将其更改为long
,也无法转换10000000000000000000000
以上的值(十进制值等于262144
)。最好的解决方案是逐字符计算,而不转换整个字符串
那么,试试下面的代码
public static long convert(String binary) {
long pow = 1, decimal = 0;
for (int i = (binary.length() - 1); i >= 0; i--) {
if (binary.charAt(i) == '1') {
decimal += pow;
}
pow *= 2;
}
return decimal;
}
整数的最大值为(2^31-1),并且从字符串中解析为int的值大于该值。因此,尝试使用Long代替int。。
下面的代码工作正常。。请在下面核对
public static int convert(String binary)
{
int p=0;
int decimal=0;
long number=Long.parseLong(binary);
while(number>0)
{
long temp = number%10;
decimal += temp*Math.pow(2, p);
number = number/10;
p++;
//write your code here
}
return decimal;
}
为什么先把它转换成十进制?这很容易:
public static void main( String[] args ) {
String str = "10011010010";
int len = str.length();
long mult = 1;
long val = 0;
for (int i = len - 1; i >= 0; i--) {
if ( str.charAt( i ) == '1' ) {
val += mult;
}
mult *= 2;
}
System.out.println( val );
}
更简单,没有pow:
int s=binary.length();
for (int pos=0;pos<s;pos++)
{
char c=binary.charAt(pos);
if (c=='1') decimal+=1;
if (pos<s-1) decimal*=2;
}
ints=binary.length();
对于(int pos=0;pos)你能不能不按原样使用二进制字符串并使用charAt
?好吧,你还没有展示你是如何提出“ActualOutput”的。请发布一个。我个人会将字符串视为字符数组,然后使用(长度-位置)循环通过该数组作为2的幂。在Java中,默认情况下,int数据类型是一个32位带符号2的补码整数,最小值为-2^31,最大值为(2^31)-1。将字符串转换为int时,您超出了此范围。您可以将其解析为long
或实现类似@DBug的功能(如果我处在你的位置,我会这么做)我的问题:在我写的代码中,要做哪些更改