华为机试题--二进制数的每位进行0和1反转求值

一、问题描述

功能描述:对一个二进制数的每位进行0和1反转,求翻转后的二进制所对应的十进制
输入:110
输出:1

要求实现方法:
public String getNumber(BigInteger data)
{
    //TODO
    return "";
}

二、算法

public String getNumber(BigInteger data) {
		String biStr = String.valueOf(data);
		char[] arr = biStr.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == '0') {
				arr[i] = '1';
			} else {
				arr[i] = '0';
			}
		}
		
		//reverse.
		int result = 0;
		for (int i = 0; i < arr.length; i++) {
			int temp = 1;
			int isum = 0;
			if(Character.getNumericValue(arr[i]) != 0) {
				if(i == arr.length -1 ) {
					result += 1;// 2的零字幕 = 1
					continue;
				}
				while (temp <= i) {
					isum = temp * 2;
					temp ++;
				}
			}
			result += isum;
		}
		return String.valueOf(result);
	}

三、测试方法

package com.albertshao.csi.interview;

import java.math.BigInteger;

/**
 * @author albertshao
 */
public class Main17 {

	public static void main(String[] args) {

		Main17 m = new Main17();
		System.out.println(m.getNumber(new BigInteger("110")));
	}

	
	public String getNumber(BigInteger data) {
		String biStr = String.valueOf(data);
		char[] arr = biStr.toCharArray();
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == '0') {
				arr[i] = '1';
			} else {
				arr[i] = '0';
			}
		}
		
		//reverse.
		int result = 0;
		for (int i = 0; i < arr.length; i++) {
			int temp = 1;
			int isum = 0;
			if(Character.getNumericValue(arr[i]) != 0) {
				if(i == arr.length -1 ) {
					result += 1;// 2的零字幕 = 1
					continue;
				}
				while (temp <= i) {
					isum = temp * 2;
					temp ++;
				}
			}
			result += isum;
		}
		return String.valueOf(result);
	}
}

运行结果

1



你可能感兴趣的:(华为,机试)