输入:<整数>+/-<整数>,<进制>
输出:<整数(计算结果)>例如,用10进制计算整数123和345的相加结果。
输入:123+345,A
输出:468
 说明: 
1.整数用数字和字母(大小写不敏感)表示,其中字母表示超过9的数,整数可以带负号,但不支持科学计数法,也不必考虑越界。
2.进制限为2到35之间的任意进制,用一位数字或字母表示,其中字母表示超过9的进制。
3.输入字符串中包括算是和进制两部分,中间用逗号隔开,字符串中科包含空格,但空格不可将同意数字隔开,字符串中不应出现其他非法字符。java 进制  加减

解决方案 »

  1.   

    Integer.valueOf(s, radix)这个方法可以将s按radix转成10进制值.
    先用中间的算术符号分开,然后去掉前后空格,然后开始转换数值,如果出错,表示整数格式不对.
      

  2.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;/**
     * 输入:<整数>+/-<整数>,<进制> 
     * 输出:<整数(计算结果)>
     * 
     * 例如,用10进制计算整数123和345的相加结果。 
     * 输入:123+345,A 输出:468
     */
    public class Test_10 { private static final Pattern PATTERN = Pattern.compile("^([+-]?\\d+)\\s?([+-])\\s?([+-]?\\d+)\\s?\\,\\s?([2-9A-Z])$");
    private static final String RADIX = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static String compute(String message){
    message = message.trim().toUpperCase();
    Matcher matcher = PATTERN.matcher(message);
    if(!matcher.find()){
    throw new IllegalArgumentException("表达式不符:"+message);
    }
    if(matcher.groupCount()!=4){
    throw new IllegalArgumentException("缺少必要数据:"+message);
    }
    int radix = RADIX.indexOf(matcher.group(4));
    int result = Integer.parseInt(matcher.group(1), radix);
    if("+".equals(matcher.group(2))){
    result += Integer.parseInt(matcher.group(3), radix);
    }else{
    result -= Integer.parseInt(matcher.group(3), radix);
    }
    return Integer.toString(result, radix);
    }

    /**
     * 测试用例
     */
    public static void main(String[] args) {
    String message = "123+345,A";
    String result = compute(message);
    System.out.println(result);
    }}