和 leetcode 的 add two numbers 有点像
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
sc.nextLine();
for (int i = 0; i < T; i++) {
String s = sc.nextLine();
System.out.println(plus1(s));
System.out.println(plus3(s));
}
}
static String plus1(String s) {
char[] arr = s.toCharArray();
char[] one = "00000000000000000000000000000001".toCharArray();
char[] res = new char[33];
int bit = 0;
for (int i = 31; i >=0 ;i--) {
int t = ((one[i] - '0') + (arr[i] - '0') + bit);
if (t >= 2) {
res[i + 1] = (char)(t - 2 + '0');
bit = 1;
} else {
res[i + 1] = (char)(t + '0');
bit = 0;
}
}
res[0] = (char)(bit + '0');
String ans = new String(res);
return ans.charAt(0) == '0' ? ans.substring(1) : ans;
}
static String plus3(String s) {
char[] arr = s.toCharArray();
char[] one = "00000000000000000000000000000011".toCharArray();
char[] res = new char[33];
int bit = 0;
for (int i = 31; i >= 0 ;i--) {
int t = ((one[i] - '0') + (arr[i] - '0') + bit);
if (t >= 2) {
res[i + 1] = (char)(t - 2 + '0');
bit = 1;
} else {
res[i + 1] = (char)(t + '0');
bit = 0;
}
}
res[0] = (char)(bit + '0');
String ans = new String(res);
return ans.charAt(0) == '0' ? ans.substring(1) : ans;
}
}
你这有点长啊,让我来:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
String[] tst = new String[2 * t];
BigInteger[] b = new BigInteger[2];
int j = 0;
for (int i = 0; i < t; i) {
String s = sc.next();
b[0] = new BigInteger(s, 2);
b[0] = b[0].add(BigInteger.ONE);
tst[j] = b[0].toString(2);
b[1] = new BigInteger(s, 2);
b[1] = b[1].add(new BigInteger(“3”));
tst[j++] = b[1].toString(2);
}