zoukankan      html  css  js  c++  java
  • 用字符串模拟两个大数相加——java实现

    问题:

      大数相加不能直接使用基本的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

      致谢:感谢您的阅读!

  • 相关阅读:
    2013年工作总结
    jquery的ajax向后台servlet传递json类型的多维数组
    web客户端通过ajaxfileupload方式上传文件
    servlet向ajax传递list数据类型,ajax向servlet传递array数据类型
    simplemodal — jquery弹出窗体插件
    【摘抄】活在当下
    unix网络编程 str_cli epoll 非阻塞版本
    unix网络编程str_cli使用epoll实现
    unix网络编程str_cli的epoll实现
    linux 建议锁和强制锁
  • 原文地址:https://www.cnblogs.com/0201zcr/p/4906283.html
Copyright © 2011-2022 走看看