- 浏览: 1196781 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1027)
- 拼接字符串小技巧 (1)
- JAVA 模块知识小结 (23)
- Tools (14)
- Android (20)
- ExtJS必学必会 (1)
- Nginx (4)
- 中间件 (9)
- java中间件 (6)
- linux (47)
- 23种设计模式 (15)
- 数据库知识 (15)
- Mycat中间件 (80)
- 华为框架--jalor5 (2)
- 数据库-----DB2 (24)
- 数据库-----ORACLE (47)
- 数据库-----MYSQL (82)
- 大数据 (16)
- 大数据--HBASE (4)
- 大数据--Storm (9)
- 大数据--Hive (5)
- 大数据--Hadoop (11)
- 大数据--ElasticSearch (16)
- 大数据--ZooKeeper (13)
- 大数据--redis (17)
- 大数据--Kafka (26)
- 大数据--MongoDB (9)
- 大数据之Flume (4)
- 大数据--sqoop (3)
- 大数据--SPARK (7)
- 大数据--memcached (1)
- 大数据------Impala (1)
- 大数据--Avro (1)
- 大数据--Apache Pig (1)
- 大数据--Logstash (1)
- 大数据--Kibana 简介 (1)
- 大数据之Impala (1)
- 大数据之Druid-IO介绍 (1)
- 大数据之HUE (1)
- 大数据之Ambari (1)
- 大数据之Presto (1)
- 大数据之Oozie (1)
- 编程语言之Python (4)
- 编程语言--PHP (5)
- 编程语言--Scala (2)
- 编程语言--JAVA之Mybatis (26)
- 编程语言之Ruby (2)
- 编程语言之C (2)
- 编程语言--JAVA之Spring (7)
- 编程语言--JAVA之Struts (1)
- 编程语言JAVA Hibernate (6)
- 编程语言之Kotlin (1)
- 编程语言--JAVA之网络编程 (3)
- 编程语言之Go (3)
- 编程语言之Erlang (1)
- erlang语言 (1)
- 算法研究--查找 (8)
- 算法研究--排序 (10)
- 网络协议 (47)
- 版本控制工具 (6)
- JAVA基础知识 (20)
- 负载均衡 (14)
- Hessian (1)
- 阿里之RocketMQ (5)
- 阿里之Canal (2)
- 阿里之TDDL (1)
- 阿里之DRDS (1)
- 阿里Dubbo框架 (2)
- 阿里JStorm框架 (3)
- 阿里之yugong (2)
- 阿里之Druid框架 (3)
- 阿里之cobar (1)
- Docker (17)
- VPN虚拟专网 (1)
- JFinal (1)
- JAVA语言基础 (23)
- HAProxy简介 (5)
- Netty介绍 (1)
- Squid介绍 (1)
- ZeroMQ (1)
- JVM深入研究 (4)
- Kerberos (1)
- Shiro (1)
- R语言 (2)
- CAS (2)
- Spring Security (1)
- 虚拟化技术 (10)
- python (2)
- Wireshark (1)
- JAVA_WEB 开发 (6)
- I/O模型 (1)
- Apache Mina (1)
- Apache Solr (2)
- Apache Nutch (1)
- Apache nifi (1)
- Apache Phoenix (1)
- Apache Thrift (1)
- Apache --Groovy (2)
- Apache Tika (1)
- Apache JMeter (1)
- Apache 之CouchDB (1)
- Apache之XML-RPC (1)
- 读书笔记 (4)
- 统计分析系统--SAS (1)
- Java Applet (1)
- JAVA之XStream (1)
- java之FreeMarker (1)
- JAVA 之WebWork (1)
- JAVA之velocity 介绍 (1)
- JAVA之Excel的导入(出) (4)
- Node.js (1)
- 信息安全 (2)
- Flex 编程 (1)
- 大数据--Alluxio (1)
- Jenkins (1)
- XDoclet (1)
- Play 框架 (1)
- ESB (2)
- JAVA之SiteMesh (1)
- JAVA 之Tiles (1)
- JAVA之工作流系统 (5)
- Apache之Tajo (1)
- 搜索引擎知识 (1)
- Apache 之Chukwa (1)
- Apache 之 ActiveMQ (2)
- Apache 之Accumulo (1)
- Apache之Lucene (2)
- Apache S4 (2)
- Apache之Tez (1)
- Apache之TOMCAT (3)
- Apache Kylin (1)
- Apache 之Ivy (1)
- Apache之Mesos (1)
- Zenoss (1)
- 阿里妈妈-adhoc之mdrill (1)
- 分布式调用 (5)
- RPC之Zeroc ICE (3)
- Java之RMI (1)
- RPC框架之Apache-XML (1)
- 人工智能系统 (10)
- 构建工具Maven (6)
- 持续集成 (1)
- 缓存技术 (8)
- 数据库之SequoiaDB (1)
- 数据分析 (2)
- 自然语言处理 (10)
- 数据库----MariaDB (1)
- 压缩算法 (2)
- 消息队列之LMAX Disruptor (1)
- 分布式文件系统DFS (1)
- Kubernetes (1)
- 自动化部署框架 (2)
- 分布式文件系统Tachyon (1)
- OpenCV (1)
- 数据库--db4o (1)
- 任务调度--Azkaban (1)
- 消息队列 (3)
- Apache 之 Flink (1)
- 消息队列,StormMQ (1)
- 图形数据库 (1)
- Zuul (1)
- 网站加速 (1)
- CDN (1)
- 数据库之PostgreSQL (2)
- CQRS 命令查询职责分离模式 (1)
- CoreOS--ETCD (1)
- 工作流引擎--Snaker (1)
- HPCC (1)
- 数据库之Greenplum (1)
- 监控系统 (8)
- Neo4j (1)
- Apache之Calcite (1)
- 大数据分享 (4)
- 人工智能分享 (10)
- Apache 之Camel (1)
- Apache之 Crunch (1)
- 分布式缓存 (7)
- Apache 之Etch (1)
- Apache之 Karaf (1)
- Apache 之ODE (1)
- Eclipse安装插件 (1)
- Apache之Qpid (1)
- Apache 之Ranger (1)
- Apache 之Flink (1)
- Apache 之Lens (1)
- Apache之Zeppelin (1)
- Apache 之Mahout (1)
- Apache之 Samza (1)
- Apache 之VCL (1)
- Apache 之Synapse (1)
- Apache 之ORC (1)
- apache之Tapestry (1)
- 射频识别 (2)
- JAVA框架之spark (1)
- Web服务器 Tengine (1)
- web服务器之kangle (1)
- 全文检索 (1)
- Java开发框架之Ninja (1)
- Spring-Boot (2)
- 操作系统底层 (1)
- Java之Web框架Vert.x (1)
- JAVA之NIO框架 (1)
- CORBA (2)
- 敏感词过滤 (1)
- 前端语言 (18)
- 事处理务 (2)
- 网络爬虫 (1)
- 复杂SQL案例 (3)
- 经典理论 (1)
- 容器集群管理系统 (1)
- 代理服务器 (1)
- 微服务框架 (8)
- 编程语言--JAVA之Web (4)
- 存储知识 (2)
- 报表技术 (12)
- Tomcat专题研究 (7)
- 网络知识 (2)
- Web服务器 之WebLogic (2)
- 编程语言--JAVA之Email (5)
- Apache 之Velocity (1)
- java之Javassist (1)
- JAVA之工作流 (3)
- JAVA之Undertow (1)
- JAVA之Grizzly (1)
- java之Spray (1)
- JAVA之验证码 (8)
- JAVA之序列化 (1)
- JAVA 之RESTful (1)
- XML解析 (5)
- RPC框架之Motan (1)
- 数据库之ArangoDB (1)
- 【lanproxy】 (1)
- 【RPC框架之RPCX】 (1)
- RPC框架之gRPC (1)
- JavaWeb之G4Studio (1)
- 区块链 (1)
- Sphinx (1)
- 跟踪系统 (1)
- 多租户 (1)
- 大数据之数据采集应用 (2)
- JAVA 之文件操作 (10)
- 软件测试 (1)
- Apache 之DistributedLog (1)
- Apache 之 Ignite (1)
- 分布式配置中心 (1)
- 【SaaS 介绍】 (1)
- 【数据库之ArangoDB】 (1)
- 【数据处理之ETL】 (1)
- Undertow (1)
- JAX-RS (1)
- 【百度云消息推送】 (1)
- IOS (7)
- Kannel (1)
- ServiceComb (1)
- 微信 (2)
- 规则引擎 (1)
- 短地址 (1)
- Exam (1)
- FastDFS (1)
- Arthas (0)
- 阿里之Arthas (1)
- 阿里之Seata (1)
- 微服务 (1)
- 分布式事务 (1)
- Flink (2)
- Apache-Ranger (1)
- azkaban (1)
- Intellij Idea (1)
- Apache DolphinScheduler (3)
- PMP项目管理 (1)
- sentry介绍 (1)
- 堡垒机 (1)
- 对象存储服务简介 (1)
- prometheus (1)
- Hazelcast (1)
- dolphinscheduler (1)
- PMP (1)
- 数据库之ClickHouse (2)
- Telegraf (1)
- apache之Dolphinscheduler (1)
最新评论
-
gaojingsong:
jstl1point0 写道高级版本JDK可以直接安装不用配置 ...
【win7配置jdk 环境变量】 -
jstl1point0:
高级版本JDK可以直接安装不用配置了
【win7配置jdk 环境变量】 -
hdd901002:
光说明错误在哪里有什么用,解决方法啊。。。我也碰到了,一条jo ...
Mycat源码解读--错误之【can't find table define in schema 】 -
masuweng:
【JAVA之图片水印】 -
masuweng:
【JAVA之多线程下载文件实现】
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;
}
}
/**
* 用字符串模拟两个大数相加,计算机中整型数据都是有范围的,不能无限大;突然想到了小学时候的列竖式进行笔算
* @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;
}
}
发表评论
-
【属性值的各种数据类型转换】
2021-08-24 18:19 1049前提条件,先构造一个properties文件 ... -
PropertyUtils 文件解读
2021-08-24 18:14 940单例模式 ,静态代码块 /** * property ... -
【JDBC协议与驱动名称】
2021-08-24 09:17 982/** * driver */ public sta ... -
【JAVA之获取CPU/内存信息】
2021-08-20 16:06 1229代码 import org.junit.Test; ... -
【集合对象按照属性排序】
2021-08-16 18:21 974源码如下: import com.crcgas.dp.se ... -
【数据库性能统计】
2021-08-16 18:15 9081、工厂方法区分不同类型数据库 /** * get c ... -
【时间戳转日时分秒】
2021-08-12 10:54 1082public static String format2Du ... -
【@PostConstruct注解研究】
2021-08-11 17:35 400最近在研究源码的时候,碰到了一个自己没有见到的注解,经过研究 ... -
【List伪分页代码】
2021-08-05 11:12 4091、自定义分页 请求参数: @PathVariab ... -
【JAVA 之简化工具Lombok】
2019-05-03 17:17 703Project Lombok is a java libr ... -
【JAVA之反射方法的应用】
2018-11-01 22:21 1019JAVA之反射的应用 import java.util.H ... -
【JAVA之获取客户端ip地址】
2018-09-22 09:43 1717/*** * 获取客户端ip地址(可以穿透 ... -
【win7配置jdk 环境变量】
2018-08-23 21:35 2221在桌面上计算机点右键选属性,或是开始菜单计算机上点右键选属性 ... -
【Eclipse构建过程循环依赖错误解决】
2018-08-22 23:10 1545A cycle was detected in the bu ... -
【JAVA 版本--雷人面试】
2016-07-24 15:40 1395目的:工作学习累了,娱乐娱乐一下,所谓隔行与隔山。 ... -
【JAVA产生对象的几种方式】
2016-04-16 20:39 1259import java.io.FileInputStrea ... -
【那些年我们踩过的java坑】
2016-02-26 21:20 61441、字符串大小写转换(JAVA文件UTF8编码,否则乱码) ... -
【Apache+tomcat+mod_jk 实现负载均衡】
2016-01-19 23:02 1658安装环境简介本次使 ... -
JSP的几种参数传值
2016-01-03 16:45 1245一、超链接<a href="P.jsp?u ... -
【门面设计模式】的故事来源(Facade Pattern)
2015-12-31 20:58 1293门面模式:门面模 ...
相关推荐
- 初始化:创建两个数组分别存储两个大数,以及一个数组用于存储结果。 - 搭配进位:从低位到高位,逐位进行加法运算,同时考虑当前位的进位。对于每一位,我们只需处理两个数组对应位置的元素加上上一位的进位值...
比较两个大数可以通过`Cmp`函数实现,从最高位(字符串末尾)开始逐位比较,如果某一位数值不相等,则返回相应的正负值表示大小关系;若所有位都相等且长度也相等,则认为两个大数相等。 3. **大数加法**: 大数...
1. **初始化**:将两个大数(以字符串形式)反转,这样我们可以从低位开始处理。反转的原因是C++字符串的索引是从0开始的,这样可以避免从高位开始遍历时的负索引问题。 2. **遍历**:从每一位开始(从末尾开始,即...
这个函数将接收两个字符串参数,分别表示两个大数,并返回一个新的字符串表示它们的和。为了处理可能产生的进位,我们需要从低位到高位逐位进行加法运算。这里可以采用类似于手工竖式加法的方法: 1. 初始化两个...
这里的`add`函数接收两个字符串形式的大数(即字符数组)`a`和`b`作为参数,返回它们相加后的结果。 1. 计算长度: 函数通过`strlen`函数分别获取`a`和`b`的长度,存储在`m`和`n`中。这两个值用于后续遍历数组时的...
- `#define MULMAXLEN (INTMAXLEN - 1) * 2 + 1`: 由于两个大数相乘的结果可能比原数更长,这里定义了结果字符串的最大长度。 - 函数原型定义: - `int insert0(char bufa[MULMAXLEN-1], char a[MULMAXLEN-1], int ...
- 使用两个字符串表示大整数。 - 将字符串转换为字符数组,每个字符代表一个十进制位。 - 从低位到高位依次相加,同时处理进位。 - 将最终结果转换回字符串形式输出。 **示例代码片段**: ```java public ...
2. **初始化大数**:在开始计算前,我们需要创建两个大数数组,并将输入的数转换成对应的数组形式。如果输入是字符串,我们可以遍历字符串,逐位将数字存入数组。 3. **数组乘法算法**:常见的算法有Karatsuba算法...
1. **加法**:两个大数相加类似于小学数学中的竖式加法,从低位向高位逐位相加,同时考虑进位。如果两个数的位数不同,只需将较短的数前面补零即可对齐。 2. **减法**:类似加法,但需要注意借位处理。如果被减数...
在编程中,我们可以使用两个指针分别遍历两个大数,进行逐位加法,并处理进位。例如,在Python中,可以直接使用内置的`+`运算符进行大数加法。 三、大数的减法 大数减法类似加法,只是需要处理借位问题。如果被减数...
例如,两个大数相加时,需要从低位到高位逐位进行,如果有进位,则需要向更高位传递。 3. **字符串转换**:为了输入和输出大数,我们需要将大数与字符串之间进行转换。可以使用`scanf`和`printf`函数配合格式化字符...
在主循环中,输入两个大数字符串sa和sb,先对它们进行反转,然后逐位相加,如果某位相加大于9,则进位。最后,再反转结果并输出。 2. 大数的减法: 大数的减法类似于加法,但需要注意借位处理。同样,代码中使用了...
6. **`main`函数**:程序入口点,读取用户输入的两个大数字符串,调用上述函数完成大数运算,并输出结果。 #### 4. 结论 通过上述C语言实现,我们可以有效地处理大数的加法、减法和乘法运算,这对于解决超出标准...
1. 初始化:为两个大数分配足够大小的unsigned char数组,并将16进制字符串转换成对应的二进制表示。 2. 垂直乘法:遍历每个乘数的位,对另一个乘数进行逐位乘法,结果是一个二维数组,其中每个元素代表对应位的...
在提供的代码示例中,可以看到一个使用C语言编写的全加器模拟程序,它实现了对两个字符串表示的大数进行加法运算。程序首先读取两个字符串形式的数字,然后通过比较它们的长度来确定较长的那个作为基准。接下来,...
在这种情况下,我们通常会将大数表示为字符串,然后逐位进行相加。这种方法称为模拟加法,是处理大数运算的基本方法之一。 大数加法的步骤大致如下: 1. **读取输入**:程序需要从输入中读取两个正整数a和b,这里...
成员变量可能是字符串或者数组形式,用来保存每一位数字,因为大数可能会有多个字节或字组成。 对于加法、减法和乘法这些运算,大数类通常会提供相应的成员函数。这些函数可能采用位操作、模拟传统算术运算或者使用...
代码首先读取两个输入的大数(以字符串形式),然后初始化两个大数的数组,将字符串中的每一位转换为整数。接下来,通过遍历两个数组,逐位相加,并处理进位。最后,将结果输出。 ```cpp #include #include using...
本篇将详细讲解如何使用字符串模拟大数的加法以及实现高精度阶乘运算。 首先,我们来看高精度加法。在给定的代码中,`add`函数实现了两个字符串形式的大数相加。这个函数的实现思路是首先确保两个字符串长度相同,...
大数加法和减法的基本思想是将两个大数对齐,然后按位相加或相减,同时考虑进位或借位。乘法通常是通过Karatsuba算法或更高级的快速乘法方法来提高效率,而除法则可能使用长除法算法,逐位计算商并处理余数。 矩阵...