大数相加
2017-11-28 20:55
197 查看
需求:
求两大数num1和num2的和。分析:
将两数转成字符串,s1和s2,从后向前遍历两字符串,当s1和s2至少有一个有值或进位值不是0的时候,需要进行加和运算,求除以10的余数,添加到缓冲区中,更新进位值,最后将缓冲区反转然后转成字符串返回。代码:
/* * 计算两大数之和 * 转成字符串处理即可,类似于链表相加 * */ class BigDataAdd{ //大数之和 public static String bigDataAdd(long num1, long num2){ //将两数转成字符串 String s1 = num1+""; String s2 = num2+""; //创建缓冲区存储大数之和 //初始化进位值0 StringBuilder sb = new StringBuilder(); int carry = 0; //遍历两个字符串,当两个字符串至少有一个有值或者进位不是0,就需要添加新的值到缓冲区 int i = s1.length()-1, j = s2.length()-1; while(i >= 0 || j >= 0 || carry != 0){ //如果s1还有值 if(i >= 0){ carry += s1.charAt(i)-'0';//注意字符到数字的转换 i--; } //如果s2还有值 if(j >= 0){ carry += s2.charAt(j)-'0'; j--; } sb.append(carry % 10);//添加新的值 carry /= 10;//更新进位值 } //返回和 return sb.reverse().toString(); } public static void main(String[] args){ long num1 = (long)(Math.pow(2, 63)+1), num2 = (long)(Math.pow(2, 63)-1); System.out.println(num1+"+"+num2+" = "+bigDataAdd(num1, num2)); } }
public class Solution { /* * @param num1: a non-negative integers * @param num2: a non-negative integers * @return: return sum of num1 and num2 */ public String addStrings(String num1, String num2) { // write your code here //当num1和num2有null或者长度是0的情况,那么直接返回另一个字符串 if(num1 == null || num1.length() == 0){ return num2; } if(num2 == null || num2.length() == 0){ return num1; } //创建缓冲区存储结果 StringBuilder sb = new StringBuilder(); int carry = 0;//初始化进位值 //从后向前遍历两个字符串 int i = num1.length()-1, j = num2.length()-1; while(i >=0 || j >= 0 || carry != 0){ if(i >= 0){ carry += num1.charAt(i)-'0'; i--; } if(j >= 0){ carry += num2.charAt(j)-'0'; j--; } sb.append(carry % 10); carry /= 10; } return sb.reverse().toString(); } }
相关文章推荐
- 大数相加
- 类似于大数相加的一个题
- [leetcode] 2. Add Two Numbers(链表、大数相加)
- 大数相加的简单实现
- 【每日一题(19)】A + B Problem II(大数相加) HDU - 1002
- poj 1047多个大数相加
- 高精度加减法(大数相加 减)
- HD OJ 1002Problem 大数相加
- 栈实现两个大数相加
- A + B Problem II && 大数相加相减
- [ACM]A + B Problem (大数相加3种方法)
- L1-3 宇宙无敌加法器(大数相加类)
- 大数相加、大数相乘
- poj1503 Integer Inquiry (大数相加)
- 两个大数(位数在50位以上)相加
- 简单大数相加
- HDOJ1002 大数相加
- 大数取余、大数比较、大数相加(更新中)
- codewars打怪升级日记 用JavaScript实现大数相加 /像数字一样加数字型字符串
- hdoj1002A + B Problem II(大数相加)