1. 问题描述:
input:从控制台输入二进制串
output:输出二进制串对应的十进制数字
2. 思路分析:
① 方法一:可以使用Java中提供的API进行转换,Long.parseLong(s, 2)或者Integer.parseInt(s, 2)进行转换
② 方法二:我们可以遍历输入的字符串当字符串的位上为1的时候那么我们将1左移对应的位数,移动的位数可以根据循环变量来进行确定
③ 方法三:循环遍历字符串判断当前位是否是1假如是1那么将1乘以该位上对应的权重,所以不管当前位是否为1每一次我们都要将上一位的权重再乘以2
3. 具体的代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//使用Integer.parseInt(s, 2)
String s =sc.next();
System.out.println("第一种方法: ");
//第一种方法在输入的二进制数字比较长的时候会造成溢出的情况
System.out.println(Long.parseLong(s, 2));
System.out.println("第二种方法: ");
solve(s);
sc.close();
}
private static void solve(String s) {
long res = 0;
int len = s.length();
for(int i = len - 1; i >= 0; i--){
if(s.charAt(i) == '1'){
res = res + (1 << (len - i - 1));
}
}
System.out.println(res);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//使用Integer.parseInt(s, 2)
String s =sc.next();
solve(s);
sc.close();
}
private static void solve(String s) {
int t = 1;
long res = 0;
int len = s.length();
for(int i = len - 1; i >= 0; i--){
if(s.charAt(i) == '1'){
res += t;
}
t *= 2;
}
System.out.println(res);
}
}