字符串模拟大数相加——Java实现

本题是CVTE二面编程题,首先考虑返回值肯定是一个字符串(int会有溢出可能),并且两个字符串只含数字,不含”+“、”-“这种。

代码如下:

 1 public static String add(String str1, String str2) {
 2          if(str1 == null)
 3              return str2;
 4          if(str2 == null)
 5              return str1;
 6          StringBuffer s1 = new StringBuffer(str1).reverse();
 7          StringBuffer s2 = new StringBuffer(str2).reverse();
 8          StringBuffer res = new StringBuffer();
 9          int len1 = s1.length();
10          int len2 = s2.length();
11          int len;
12          if(len1 < len2) {
13              len = len2;
14              int count = len2 - len1;
15              while(count-- > 0)
16                  s1.append(‘0‘);
17          } else {
18              len = len1;
19              int count = len1 - len2;
20              while(count-- > 0)
21                  s2.append(‘0‘);
22          }
23          int overflow = 0;
24          int num;
25          for(int i = 0; i < len; i++) {
26              num = s1.charAt(i) - ‘0‘ + s2.charAt(i) - ‘0‘ + overflow;
27              if(num >= 10) {
28                  overflow = 1;
29                  num -= 10;
30              } else {
31                  overflow = 0;
32              }
33              res.append(String.valueOf(num));
34          }
35          if(overflow == 1)
36              res.append(1);
37
38          return res.reverse().toString();
39     }
时间: 2024-10-09 20:44:20

字符串模拟大数相加——Java实现的相关文章

hdu1047(模拟大数循环相加)

题目信息:多个大整数相加求和,(用add函数循环相加) http://acm.hdu.edu.cn/showproblem.php?pid=1047 AC代码: /** *大数的循环加法,转化为字符串循环相加到字符串为"0" *注意s=="0"的情况,输出数据之间有空格 */ #include<iostream> #include<string> #include<cstdio> using namespace std; stri

大数运算之字符串模拟

相信大家被特别大的两个数据做运算折磨过.当两个操作数或者运算结果超过类型的表示范围后会有意想不到的错误,这时候我们的电脑还不如我们高中用过的科学计算器,这是作为一个程序员所不能忍受的.所以我们得找到其他的方式来计算.这就是我们今天要讨论的字符串模拟大数运算. 我们的运算一般使用int类型来算的,那么首先我们先复习一下各种int类型的数据表示范围: unsigned int 0-4294967295    int   -2147483648-2147483647  unsigned long 0-

大数相加(不开辟额外空间)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25555743 大数相加可以借助多种方法来实现,这里提供了一种链表节点的数据域为int型(用char型也可以,这样更省空间)的思路.这篇文章采用常用的转变为字符串进行处理的方法,下面说下我用字符串实现大数相加的思路: 假设输入了如下两个字符串(其中上面的红色部分表示数组的下标,下面的绿色和黄色部分表示各字符): s1: s2: 很明显,s1的实际长度为4,s2的实际长度为7,将二者在最低位

高精度问题之大数相加(原来就是用字符串相加,模拟手算这么简单!)

解题心的: 就是基本的一对一模拟手算..借助c++的string 不用逆序运算了.很方便的补0.  最后处理下前导0的问题. #include <iostream> #include <string> using namespace std; // 实现大数相加 结果存放在num中 void bigIntergerAdd(string &num, string add) { int goBit = 0; // 存放进位 // 先交换下顺序 加数的位数要比较少 if (num

HDU 1250 Hat&#39;s Fibonacci(Java大数相加)+讲解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1. F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n -

POJ 1503 Integer Inquiry(大数相加,java)

题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main { /** * @param args */ public static void main(String[] args) throws Exception { // 定义并打开输入文件 Scanner cin = new Scanner(System.in); BigInteger a, sum

Java之大数相加

之前参加某公司笔试,机试题目是大数相加,两大数是字符串形式,求和. 当时讨巧用的是BigDecimal类,但是发迷糊了,以为b1.add(b2)后,和就加到b1上了,结果一直输出不对. 其实应该是这样: private static void add2Sum(String s1, String s2) { System.out.println("-----------"); BigDecimal b1 = new BigDecimal(s1); BigDecimal b2 = new

java-两个大数相加

题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a="8888899999999888";  String b="88888888888888";  String str=new BigInteger(a).add(new BigInteger(b)).toString();  System.out.println(str);

栈的应用—大数相加

package org.Stone6762.MStack.adopt;    import java.util.Scanner;    import org.Stone6762.MStack.imple.LinkStack;    /**  * @author_Stone6762  * @Description_大数相加  * */  public class BigAdd {        /**      * @Describe_将表示数字的字符串从高位到低位的形式压入栈_并去除其中的空格