题目
输入一个字符串,将字符串代表数字转换成二进制和十六进制字符串。
若输入字符串,不是合法数字则输出"INPUTERROR";
若输入字符串,超出int的范围则输出"NODATA",int范围[-215, 215-1];
若二进制不足16位用0补足,若十六进制不足4位用0补足。
样例
输入:"15"
输出:"0000000000001111,000F"
输入:"-1"
输出:"1111111111111111,FFFF"
下流的答案
import java.util.*;
/**
* @Author Hawkii
* @Date 2020/12/24
*/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.changeFormatNumber0("**0"));
System.out.println(s.changeFormatNumber0("-10000"));
System.out.println(s.changeFormatNumber0("30"));
System.out.println(s.changeFormatNumber0("15555555555"));
}
/**
* 将输入的十进制数字转换为对应的二进制字符串和十六进制字符串
* @param number string字符串 十进制数字字符串
* @return string字符串
*/
public String changeFormatNumber0 (String number) {
char[] n = number.toCharArray();
int len = number.length();
int minus;
if(n[len-1] == '-')
minus = 1;
else if(n[len-1] >= '0' && n[len-1] <= '9')
minus = 0;
else
return "INPUTERROR";
long sum=0;
for(int i=0; i<=len-1; i++)
{
if(minus==1 && i==0)
continue;
if(n[i]>'9' || n[i]<'0')
return "INPUTERROR";
else
sum = sum * 10 +n[i]-'0';
if(sum > 0x80000000 && minus==1)
return "NODATA";
if(sum > 0x7FFFFFFF)
return "NODATA";
}
int num=(int)sum;
String str2="";
String str16="";
String index = "0123456789ABCDEF";
char[] chars = index.toCharArray();
for (int i=0; i<16; i++)
{
if(num % 2 == 0)
str2 = "0" + str2;
else
str2 = "1" + str2;
num = num>>1;
}
num=(int)sum;
for (int i=0,j; i<4; i++)
{
j = num % 16;
str16 = chars[j] + str16;
num = num>>4;
}
return str2+","+str16;
}
}
上流的答案
import java.util.*;
/**
* @Author Hawkii
* @Date 2020/12/24
*/
public class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.changeFormatNumber1("**0"));
System.out.println(s.changeFormatNumber1("-10000"));
System.out.println(s.changeFormatNumber1("30"));
System.out.println(s.changeFormatNumber1("15555555555"));
}
public String changeFormatNumber1 (String number) {
String str2="";
String str16="";
char[] chars = number.toCharArray();
//截取正数部分
if(chars[0] == '-')
chars = number.substring(1,number.length()).toCharArray();
//遍历判断是否合法
for(int i=0; i<chars.length; i++){
if(chars[i]<'0' || chars[i]>'9')
return "INPUTERROR";
}
try {
long numL = Integer.parseInt(number);
int num = (int) numL;
str2 = Integer.toBinaryString(num);
str16 = Integer.toHexString(num);
str16 = str16.toUpperCase();
}catch (NumberFormatException ne){
return "NODATA";
}
while(str2.length()<16)
str2 = "0" + str2;
while(str16.length()<4)
str16 = "0" + str16;
return str2+","+str16;
}
}