华为OJ平台——超长正整数相加
题目描述:
请设计一个算法完成两个超长正整数的加法。
输入
输入两个字符串数字
输出
输出相加后的结果,string型
样例输入
99999999999999999999999999999999999999999999999999 1
样例输出
100000000000000000000000000000000000000000000000000
思路:
在Java中,这样的大数运算可以直接用BigInteger类中的方法来进行运算和处理,那样本题没有任何意义了
因此在本方法中,不直接采用该类中的方法进行运算,直接在字符串中进行逐位运算的方法来得到结果
import java.util.Scanner; /**
* 请设计一个算法完成两个超长正整数的加法。
输入
输入两个字符串数字
输出
输出相加后的结果,string型
样例输入
99999999999999999999999999999999999999999999999999 1
样例输出
100000000000000000000000000000000000000000000000000
*
*/
public class BigDataAdd { public static void main(String[] args) {
//输入,读取两个字符串
Scanner cin = new Scanner(System.in) ;
String num1 = cin.next() ;
String num2 = cin.next() ;
cin.close() ; System.out.println(addBigdata(num1,num2)); } /**
* 该方法完成运算,返回字符串结果
* @param num1
* @param num2
* @return
*/
private static String addBigdata(String num1, String num2) {
int last = 0 ;
//用StringBuilder来添加运算结果
StringBuilder sb = new StringBuilder() ;
int len1 = num1.length() ;
int len2 = num2.length() ;
int now1 ; //保存字符串num1中当前运算的 位 的值
int now2 ;
int res ; //保存当前位的运算结果
for(int i = len1-1, j = len2-1 ; i >= 0 || j >= 0; i--,j--){
//获取当前num1的当前运算位的值,
//当最高位超过本串的长度时,设为0
if( i >= 0){
now1 = num1.charAt(i) - '0' ;
}else{
now1 = 0 ;
}
//获取当前num2的当前运算位的值,当最高位超过本串的长度时,设为0
if( j >= 0){
now2 = num2.charAt(j) - '0' ;
}else{
now2 = 0 ;
}
//计算结果,两个当前位以及进位值相加
res = now1 + now2 + last ;
//当当前位的计算结果大于等于10时需要进位,
//置进位标志位1,保存的计算结果则取个位的值
if(res >= 10){
last = 1 ;
res = res - 10 ;
}
sb.append(res) ; res = 0 ;
}
//最高位运算结束后,若有进位,则应保存结果
if(last != 0){
sb.append(last) ;
}
//上面的结果是从个位一次向高位保存的,
// 所以正在的结果需要反转一下
return sb.reverse().toString() ;
}
}
Code
华为OJ平台——超长正整数相加的更多相关文章
- 华为OJ平台——字符串分隔
题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...
- 华为OJ平台——输出最小的k个数
输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint ...
- 华为OJ平台——矩阵乘法
题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵 ...
- 华为OJ平台——完美数
import java.util.Scanner; /** * * 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. * 它所有的真因子(即除了自身以外的约数)的和(即 ...
- 华为OJ平台——将真分数分解为埃及分数
题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...
- 华为OJ平台——百钱买百鸡问题
题目描述: 元前五世纪,我国古代数学家张丘建在<算经>一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一. 百钱买百鸡,问鸡翁.鸡母.鸡雏各几何? 思路: 这道题很简单,假 ...
- 华为OJ平台——密码强度等级
题目描述: 密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分. 一.密码长度: 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 二.字母: 0 ...
- 华为OJ平台——求最大连续bit数
题目描述: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 输入: 一个byte型的数字 输出: 对应的二进制数字中1的最大连续数 思路: ...
- 华为OJ平台——统计字符串中的大写字母
题目描述: 统计字符串中的大写字母的个数 输入: 一行字符串 输出: 字符串中大写字母的个数(当空串时输出0) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可 ...
随机推荐
- iphone Dev 开发实例9:Create Grid Layout Using UICollectionView in iOS 6
In this tutorial, we will build a simple app to display a collection of recipe photos in grid layout ...
- OkHttp 详解
OkHttp使用: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html OkHttp源码: http:/ ...
- C++命名空间 namespace的作用和使用解析
一. 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突. 在 C语言中定义了3个层次的作用域,即文件(编译单元).函数和复合语句.C ...
- DBA_Oracle Event等待事件分析(概念)
2014-12-18 Created By BaoXinjian
- DBA_Oracle数据库运维监控(案例)
2014-07-27 Created By BaoXinjian
- python(15)提取字符串中的数字
python 提取一段字符串中去数字 ss = “123ab45” 方法一:filter filter(str.isdigit, ss) 别处copy的filter的用法: # one>> ...
- Hololens开发笔记之使用Unity开发一个简单的应用
一.Hololens概述 Hololens有以下特性 1.空间映射借助微软特殊定制的全息处理单元(HPU),HoloLens 实现了对周边环境的快速扫描和空间匹配.这保证了 HoloLens能够准确地 ...
- Spring中bean的配置
先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经 ...
- UCOS-2 消息邮箱与队列
一个有趣的网络解释: 信号量就是中央政府发给官人做一方大员的官印,有很多种官印但是不能一印多发,得到官印者才能掌权鱼肉一方百姓(任务得到信号量才能运行),否则你就只要等官跑官.(当然官印也可随时被政府 ...
- jsp+javaBean 计算器实例
package com.wzh.test.domain; import java.math.BigDecimal; public class CalculatorBean { private Stri ...