【2020.10.01 兴业数金】进制转换、补码

package top.actim.test08;

public class Solution {
    
    
	/**
	 * 将输入的十进制数字转换为对应的二进制字符串和十六进制字符串
	 * 
	 * @param number string字符串 十进制数字字符串
	 * @return string字符串
	 */
	public String changeFormatNumber(String number) {
    
    
		String an = null;
		char[] ans = new char[21];
		ans[16] = ',';
		char[] map = {
    
     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		// write code here
		try {
    
    
			int num = Integer.parseInt(number);
			if (num > Short.MAX_VALUE || num < Short.MIN_VALUE) {
    
    
				an = "NODATA";
			} else {
    
    
				int temp = 65536 + num;
				int i = 15;
				while (i >= 0) {
    
    
					ans[i] = temp % 2 == 1 ? '1' : '0';
					temp /= 2;
					i--;
				}

				temp = 65536 + num;
				i = 20;
				while (i > 16) {
    
    
					ans[i] = map[(int) (temp % 16L)];
					temp /= 16;
					i--;
				}
				an = new String(ans);
			}	
		} catch (NumberFormatException ex) {
    
    
			an = "INPUTERROR";
		}

		return an;
	}
	
	public static void main(String[] args) {
    
    
		System.out.println(new Solution().changeFormatNumber("16"));
		System.out.println(new Solution().changeFormatNumber("-16"));
		System.out.println(new Solution().changeFormatNumber("A"));
		System.out.println(new Solution().changeFormatNumber("65536"));
		/*
		**	0000000000010000,0010
		**	1111111111110000,FFF0
		**	INPUTERROR
		**	NODATA
		*/
	}
}

猜你喜欢

转载自blog.csdn.net/Activity_Time/article/details/108892804