前几天,朋友给我一道面试题。我看了看挺有意思的。原题如下:

刚碰到这道题的时候,一直在想怎么存,毕竟已经超过了int类型的存储,后来发现自己好蠢,其实可以还用string类型去存储。那么加法就变得简单多了,分成两个步骤:

一,加法运算,二,进制运算

加法运算如下:

/**
     * 
     * 功能:大数字相加 
     * 参数:@param s1
     * 参数:@param s2
     * 作者:张双亮
     * 日期:2018年11月10日 下午3:33:58
     */
    private static byte[] BigSum(String params1, String params2){
        byte[] s1 = params1.getBytes();
        byte[] s2 = params2.getBytes();
        int lenghtMax = 0; 
        int lenghtMin = 0;
        lenghtMax = lenghtMin = s1.length;
        byte[] tempMax = Arrays.copyOf(s1, lenghtMax);
        byte[] tempMin = Arrays.copyOf(s1, lenghtMin);
        if(s1.length > s2.length){
            lenghtMin = s2.length;
            tempMin = Arrays.copyOf(s2, lenghtMin);
        }else{
            lenghtMax = s2.length;
            tempMax = Arrays.copyOf(s2, lenghtMax);
        }
        byte[] s3 = new byte[lenghtMax];
        int reduce = lenghtMax - lenghtMin;
        for(int j = 0; j < reduce; j++){
            s3[j] = (byte)(tempMax[j] - 48);
        }
        for(int i = 0; i < lenghtMin; i++){
            s3[i+reduce] = (byte) (tempMin[i] + tempMax[i+reduce] - 96);
        }
        return s3;
    }

进制运算如下:

/**
     * 
     * 功能:进制运算 
     * 参数:@param s
     * 参数:@return
     * 作者:张双亮
     * 日期:2018年11月10日 下午4:19:11
     */
    private static String BigDecimal(byte[] s){
        for(int i = s.length-1; i >= 1; i--){
            if(s[i] >= 10){
                s[i] = (byte) (s[i] - 10);
                s[i-1] = (byte) (s[i-1] + 1);
            }
        }
        String str = "";
        for(int i = 0; i < s.length; i++){
            str += ""+s[i]+"";
        }
        return str;
    }

然后就可以了。

大数字加法运算(超过1000位)相关推荐

  1. js大数字类型(超过16位)失真问题

    bug经过:点击修改无法展示信息(修改时调用queryOne,以id(long)为值,页面传过去的id=1480042498255640-00 ,在数据库中该id=148004249825564012 ...

  2. 数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。

    加法伺候 //超过20位数值相加---------------------------------------- function bigNumAdd(a, b) {if (!(typeof a == ...

  3. 4、大数字运算(BigInteger类和BigDecimal类)

    在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...

  4. Java快速入门到精通—大数字运算(BigDecimal 类)

    在Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中BigInteger 类是针对整型大 ...

  5. 剑指offer第12题打印从1到n位数以及大整数加法乘法

    字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...

  6. 信息学奥赛一本通(1168:大整数加法)

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 44610     通过数: 14295 [题目描述] 求两个不超过200位的非负整数的和. ...

  7. 信息学奥赛一本通(c++):1168:大整数加法

    一.题目 1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位 ...

  8. 题目:long long long 之加法运算

    题解 本题中要求用字符串模拟大数的加法.直接将较短的串加到较长的串上,然后输出长串后就是相加的结果.在模拟加法时会遇到进位的操作,当两串中的字符相加大于10就会进1,此时如果长串中的下一位是9的话则又 ...

  9. 信息学奥赛一本通:1168:大整数加法

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 76804     通过数: 25726 [题目描述] 求两个不超过200位的非负整数的和. ...

  10. 1168:大整数加法

    1168:大整数加法 时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位的非负整数 ...

最新文章

  1. C++ 智能指针详解
  2. 初步了解超图桌面版导入CityGML数据
  3. 一个故事讲清楚BIO NIO 异步
  4. 一次thinkphp框架 success跳转卡顿问题的解决
  5. ACM与Java -- 大整数类的常用函数一览表
  6. 每日一题(C语言基础篇)3
  7. [转载] pickle:让python对象序列化
  8. 剑指offer——面试题35:第一个只出现一次的字符
  9. 紫书 习题 8-2 UVa 1610 (暴力出奇迹)
  10. MATLAB图像处理学习日记之__图像的K-means均值法与局部阈值和迭代式阈值分割法算法——整理资源汇总
  11. Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?
  12. 雷丁CAN通讯信号上位机软件
  13. AI将光子时间转换成3D图像,通过时间来可视化世界
  14. 认真学习InnoDB的数据存储结构中的区、段与表空间
  15. springboot 银联支付(快捷支付)
  16. html元素相对定位和绝对定位
  17. 影像学纹理分析:放射科医生需要知道的事项
  18. Tyvj P1153 间谍网络
  19. Windows7 64位系统PL2303驱动无法安装问题解决
  20. 操作系统课后答案第二章

热门文章

  1. php readystate,ajax+php打造进度条 readyState各状态
  2. html的国际标准智商测试,国际标准智商测试题
  3. WESHOP | 基于微服务的小程序商城系统
  4. Swagger2集成JWT登陆步骤,结合Spring拦截器自定义需要登陆的URL
  5. python画喜羊羊代码_python学习笔记7-字典
  6. 机器视觉中的光源选型及打光方案分析
  7. 内核网络数据结构-SKB
  8. 计算机打音乐歌谱成都,赵雷成都的曲谱
  9. 苹果怎么换字体_苹果手机电池不行了怎么办,换什么牌子好?
  10. 剑桥禁书与一个自由的灵魂