用字符串模拟两个大数相加——java实现
2015-10-24 10:10
639 查看
问题:
大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。
思路:
1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3.把两个正整数相加,一位一位的加并加上进位。
具体代码如下:
测试:
结果:
致谢:感谢您的阅读!
大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。
思路:
1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;
2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;
3.把两个正整数相加,一位一位的加并加上进位。
具体代码如下:
/** * 用字符串模拟两个大数相加 * @param n1 加数1 * @param n2 加数2 * @return 相加结果 */ public static String add2(String n1,String n2) { StringBuffer result = new StringBuffer(); //1、反转字符串 n1 = new StringBuffer(n1).reverse().toString(); n2 = new StringBuffer(n2).reverse().toString(); int len1 = n1.length(); int len2 = n1.length(); int maxLen = len1 > len2 ? len1 : len2; boolean nOverFlow = false; //是否越界 int nTakeOver = 0 ; //溢出数量 //2.把两个字符串补齐,即短字符串的高位用0补齐 if(len1 < len2) { for(int i = len1 ; i < len2 ; i++) { n1 += "0"; } } else if (len1 > len2) { for(int i = len2 ; i < len1 ; i++) { n2 += "0"; } } //3.把两个正整数相加,一位一位的加并加上进位 for(int i = 0 ; i < maxLen ; i++) { int nSum = Integer.parseInt(n1.charAt(i) +"") + Integer.parseInt(n2.charAt(i) +""); if(nSum >= 10) { if(i == (maxLen - 1)) { nOverFlow = true; } nTakeOver = 1; result.append(nSum - 10); } else { nTakeOver = 0; result.append(nSum); } } //如果溢出的话表示位增加了 if(nOverFlow) { result.append(nTakeOver); } return result.reverse().toString(); }
测试:
public static void main(String[] args) { String str = add2("911","222"); System.out.println(str); }
结果:
1133
致谢:感谢您的阅读!
相关文章推荐
- springmvc中controller返回html页面时页面乱码解法
- Java——继承,抽象,接口
- Java-ServletInputStream
- Java-ServletInputStream
- Sublime Text 3搭建 Java 开发环境
- Eclipse添加ibatis DTD文件实现xml的自动提示功能
- java.nio分析软件包(三)---Charset理解力
- Struts2配置
- JAVA中自定义日志输出到指定文件
- Struts框架02-执行流程
- eclipse开发php全过程的搭建带debug的配置
- 无需Cygwin,如果没有在命令行,Eclipse编NDK
- Java 类加载器
- Struts框架搭建时所遇到的问题
- Gradle之旅-搭建eclipse+gradle环境
- maven 项目 启动时异常:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListen
- 从HelloWorld和文档注释开始入门Java编程
- Eclipse启动时报错:No java virtual machine
- String与new String的区别
- 离线版完美解决eclipse 安装Genymotion插件的安装问题