7进制字符串转为10进制的int类型数字(H3C笔试题)
2016-01-13 22:26
323 查看
【2011年华三通讯应届生笔试题】题目:请写一段将7进制转为10进制的正整数的函数。
【思路】在Java API中有相关的函数,Integer.parsint(String str,int radix)。题目比较简单。比如,”12”,即循环进行:result=0 result=result *7+1=1; result=result*7+2=9; 本题主要考察几个异常情况和溢出情况,比如,超出Int范围如何判断。比如,某轮循环result为Integer.max/7,表明个位如果大于7进制Integer.max的个位,则溢出;某轮循环result大于Integer.max/7,则不论个位是否大于7进制Integer.max的个位,都溢出。
【思路】在Java API中有相关的函数,Integer.parsint(String str,int radix)。题目比较简单。比如,”12”,即循环进行:result=0 result=result *7+1=1; result=result*7+2=9; 本题主要考察几个异常情况和溢出情况,比如,超出Int范围如何判断。比如,某轮循环result为Integer.max/7,表明个位如果大于7进制Integer.max的个位,则溢出;某轮循环result大于Integer.max/7,则不论个位是否大于7进制Integer.max的个位,都溢出。
private static int parseInt(String str4, int radix) { /* 异常情况1:字符串为null */ if (str4 == null) { throw new IllegalArgumentException("字符串为null!"); } int length = str4.length(), offset = 0; /* 异常情况2:字符串长度为0 */ if (length == 0) { throw new IllegalArgumentException("字符串长度为0!"); } boolean negative = str4.charAt(offset) == '-'; if (negative) { throw new IllegalArgumentException("字符串位负数!"); } int result = 0; char[] temp = str4.toCharArray(); while (offset < length) { char digit = temp[offset++]; int currentDigit = digit - '0'; /* 一位一位判断,是否在0~7之间,否则为非法输入 */ if (currentDigit < radix && currentDigit >= 0) { /* 2种溢出情况,第1种,当前的resut已经等于Integer.MAX_VALUE / 10,看个位数是否在范围内 */ if (result == Integer.MAX_VALUE / radix && currentDigit > Integer.MAX_VALUE % radix) { throw new IllegalArgumentException("字符串溢出!"); /* 2种溢出情况,第2种,当前的resut已经大于Integer.MAX_VALUE / 10,不论个位是什么,都溢出 */ } else if (result > Integer.MAX_VALUE / radix) { throw new IllegalArgumentException("字符串溢出!"); } /*关键部分*/ result = result * radix + currentDigit; } else { throw new IllegalArgumentException("字符串字符不在0~"+radix+"!"); } } return result; }
相关文章推荐
- SpringMVC 使用JSR-303进行校验 @Valid
- iOS状态栏颜色设置
- 《笨办法学Python》 第12课手记
- ucos实时操作系统学习笔记——操作系统在STM32的移植
- JS_语句
- web项目技术选型
- python核心编程-搜索与替换
- leveldb之简单测试
- 2016年搭建nginx+php+mysql遇到的一些问题
- 校验xx权限是否开启
- MySQL High Availability总结(二) 配置Master
- REST接口规范
- 计算机组成原理 - 一些简单题和设计分析题
- STL中list详解
- Resume (Curriculum Vitae)
- 在Xcode中使用Git进行源码版本控制
- 正常用的zabbix服务器进程,包括监控服务器本机
- 读书-持续集成-为缺陷编写测试
- MingW编译virt-viewer
- 第二讲 完全背包问题 HD Piggy-Bank 1114