加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用字符串模拟两个大数相加

发布时间:2020-12-14 02:15:21 所属栏目:大数据 来源:网络整理
导读:? package cn.com.hadoop; /** * 用字符串模拟两个大数相加,计算机中整型数据都是有范围的,不能无限大;突然想到了小学时候的列竖式进行笔算 * @author gaojingsong */ public class Demo { /**???????????? 1897 ? 思路:???????? +?? 56????????????????
? package cn.com.hadoop; /** * 用字符串模拟两个大数相加,计算机中整型数据都是有范围的,不能无限大;突然想到了小学时候的列竖式进行笔算 * @author gaojingsong */ public class Demo { /**???????????? 1897 ? 思路:???????? +?? 56???????????????????????????????????????????????? ?????? 1.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;(1897,0056)? 2.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;(7981,,65 00)???? ?? 3.把两个正整数相加,一位一位的加并加上进位。? ???????? (7+6=13? 9+5+进位1=15 8+0+进位1=9 1+0=1)?? ???????? 3??????? 5???????? 9?????????? 1 因此结1953?????????????????? ? */ public static void main(String[] args) { ? add("991","23"); ? add("1897","56"); ? //java.math.BigInteger a2 = new java.math.BigInteger(a); } /** ? * 1、取得两个字符串的长度,把长度较短的字符串,在左面补0,使之与较长字符串一样长 ?? * 2、长度相同反转字符串,从个位开始进行累加,字符串每位取出来相加, ?????? 如果大于10则进位,结果位为相加和减去10 ? * @param n1 ? * @param n2 ? * @return ? */ public static String add(String n1,String n2) { ? StringBuffer result = new StringBuffer(); ? // 一、反转 ? StringBuffer num1 = new StringBuffer(n1).reverse(); ? StringBuffer num2 = new StringBuffer(n2).reverse(); ? // 二、补齐,把两个字符串补齐,即短字符串(反转后短字符串的最低位)的高位用0补齐,? int len1 = num1.length(); ? int len2 = num2.length(); ? int maxlength = len1 > len2 ? len1 : len2; ? if (len1 > len2) { ?? for (int i = len2; i < len1; i++) { ??? num2.append(0); ?? } ? } else if (len1 < len2) { ?? for (int i = len1; i < len2; i++) { ??? num1.append(0); ?? } ? } ? // 三、逐位相加,把两个正整数相加,一位一位的加并加上进位 ? int overNum = 0;????? //溢出数量,个位数相加最多进一位 ? boolean hinghtLocOverFlow = false;//是否越界 ? for (int i = 0; i < maxlength; i++) { ?? int num3 = overNum ???? + Integer.parseInt(String.valueOf(num1.charAt(i) + "")) ???? + Integer.parseInt(String.valueOf(num2.charAt(i) + "")); ?? if (num3 >= 10) { ??? result.append(num3 - 10); ??? overNum = 1;//每位相加满十则进一 ??? //判断最后一位是否会溢出满10,满十则进一位 ??? if (i == maxlength-1) { ???? hinghtLocOverFlow = true; ??? } ?? } else { ??? overNum = 0; ??? result.append(num3); ?? } ?? //如果溢出的话表示位增加了 ?? if (hinghtLocOverFlow) { ??? result = result.append(1); ?? } ? } ? String res = result.reverse().toString(); ? System.out.println(res); ? return res; } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读