大数字加法运算(超过1000位)
前几天,朋友给我一道面试题。我看了看挺有意思的。原题如下:
刚碰到这道题的时候,一直在想怎么存,毕竟已经超过了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位)相关推荐
- js大数字类型(超过16位)失真问题
bug经过:点击修改无法展示信息(修改时调用queryOne,以id(long)为值,页面传过去的id=1480042498255640-00 ,在数据库中该id=148004249825564012 ...
- 数字太大了,计算加法、减法会报错,结果不正确?怎么办?用JavaScript实现大数据(超过20位的数字)相加减运算。
加法伺候 //超过20位数值相加---------------------------------------- function bigNumAdd(a, b) {if (!(typeof a == ...
- 4、大数字运算(BigInteger类和BigDecimal类)
在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...
- Java快速入门到精通—大数字运算(BigDecimal 类)
在Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中BigInteger 类是针对整型大 ...
- 剑指offer第12题打印从1到n位数以及大整数加法乘法
字符和数字加减就是字符的ASCII码和数字直接加减. 方法一: 1)在字符串操作中给一个整形数字加(字符0)就是把它转化为字符,当然给一个字符减去(字符0)就可以把它转化为数字了:如果确实是最后一位字 ...
- 信息学奥赛一本通(1168:大整数加法)
1168:大整数加法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 44610 通过数: 14295 [题目描述] 求两个不超过200位的非负整数的和. ...
- 信息学奥赛一本通(c++):1168:大整数加法
一.题目 1168:大整数加法 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位 ...
- 题目:long long long 之加法运算
题解 本题中要求用字符串模拟大数的加法.直接将较短的串加到较长的串上,然后输出长串后就是相加的结果.在模拟加法时会遇到进位的操作,当两串中的字符相加大于10就会进1,此时如果长串中的下一位是9的话则又 ...
- 信息学奥赛一本通:1168:大整数加法
1168:大整数加法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 76804 通过数: 25726 [题目描述] 求两个不超过200位的非负整数的和. ...
- 1168:大整数加法
1168:大整数加法 时间限制: 1000 ms 内存限制: 65536 KB [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位的非负整数 ...
最新文章
- C++ 智能指针详解
- 初步了解超图桌面版导入CityGML数据
- 一个故事讲清楚BIO NIO 异步
- 一次thinkphp框架 success跳转卡顿问题的解决
- ACM与Java -- 大整数类的常用函数一览表
- 每日一题(C语言基础篇)3
- [转载] pickle:让python对象序列化
- 剑指offer——面试题35:第一个只出现一次的字符
- 紫书 习题 8-2 UVa 1610 (暴力出奇迹)
- MATLAB图像处理学习日记之__图像的K-means均值法与局部阈值和迭代式阈值分割法算法——整理资源汇总
- Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?
- 雷丁CAN通讯信号上位机软件
- AI将光子时间转换成3D图像,通过时间来可视化世界
- 认真学习InnoDB的数据存储结构中的区、段与表空间
- springboot 银联支付(快捷支付)
- html元素相对定位和绝对定位
- 影像学纹理分析:放射科医生需要知道的事项
- Tyvj P1153 间谍网络
- Windows7 64位系统PL2303驱动无法安装问题解决
- 操作系统课后答案第二章