题目描述: 对一个二进制的每位进行0和1反转,求反转后的二进制所对应的十进制数
输入:110 输出:1
方法:
public String getNumber(BigInteger data)
{
return “”;
}
//实现
import java.math.BigInteger;
import java.util.Scanner;
/**
*
* @author yanwu
*/
public class Test18
{
public static void main(String[] args)
{
System.out.println("Input Binary data: ");
Scanner scan = new Scanner(System.in);
BigInteger data = scan.nextBigInteger();
System.out.println(new Test18().getNumber(data));
}
//将二进制的每位进行0和1反转,并计算对应十进制数
public String getNumber(BigInteger data)
{
int sum = 0;
String str = String.valueOf(data);
char[] ch = str.toCharArray();
StringBuilder sb = new StringBuilder(0);
for (char c : ch)
{
if (c == '0')
{
c = '1';
}
else
{
c = '0';
}
sb.append(c);
}
sb.reverse();
for (int i = 0; i < sb.length(); i++)
{
sum += Character.getNumericValue(sb.charAt(i))
* fact(i);
}
return String.valueOf(sum);
}
//2的阶乘
public int fact(int n)
{
if (n == 0)
{
return 1;
}
int sum = 1;
for (int i = 1; i <= n; i++)
{
sum *= 2;
}
return sum;
}
//用递归的2的阶乘
public int fact1(int n)
{
if (n == 0)
{
return 1;
}
else
{
return 2 * fact1(n - 1);
}
}
}