华为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) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可 ...
随机推荐
- 328. Odd Even Linked List
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- SQL server 学习笔记1
1.查询安装的排序规则选项喝当前的排序规则服务器属性 select * from fn_helpcollations(); 2.查看当前服务器的排序规则 select serverproperty(' ...
- 黄聪:wordpress自定义post_type,并且自定义固定链接
<? class zsjh { function init() { add_action( 'init', array($this,'create_zsjh') ); add_filter('p ...
- 从网站上复制代码到MyEclipse后每行都是字符编码错误的解决办法
注意图中的工具栏的按钮:Show Whitespace Characters(Window->Preferences->General->Editors->Text Edito ...
- 非常陌生的cmake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的 ...
- dede各种运用[转]
文章正文页常用函数: 1.相应文章上下文调用: {dede:prenext function="str_replace(' 下一篇:','<'.'br'.' />下一篇: 2.文 ...
- CSS背景属性Background详解
[转] 本文详解了CSS的背景属性Background,包括CSS3中新增的背景属性.如果你是个CSS初学者,还可以查看之前介绍的CSS浮动属性和CSS透明属性详解. CSS2 中有5个主要的背景(b ...
- mysql常用脚本
1.执行拼接字符串sql语句(可传参数) set @dbname='trickraft_14f.'; set @sql=CONCAT('SELECT * FROM ',@dbname,'Armforc ...
- 异步task处理
public async Task<Customers> GetCustomers() { return await Service.GetCustomersAsync(); } publ ...
- SIT和UAT的区别
SIT和UAT有什么区别?谢谢! 系统内部集成测试(System Integration Testing) SIT 用户验收测试(User Acceptance Testing) UAT ...