栈实现两个大数相加

import java.util.Scanner;
import java.util.Stack;

public class JavaDemo {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        /**
         * 第一个大数入栈
         */
        System.out.println("输入第一个大数:");
        String firstNum = scanner.nextLine();
        Integer integer = Integer.valueOf(firstNum);
        Stack firstStack = new Stack<Integer>();
        for (int n = 0; n < firstNum.length(); n++) {
            firstStack.push(integer % 10);// 从个位开始压入栈
            integer = integer / 10;
        }
        /**
         * 第二个大数入栈
         */
        System.out.println("输入第二个大数:");
        String secondNum = scanner.nextLine();
        Integer integer2 = Integer.valueOf(secondNum);
        Stack secondStack = new Stack<Integer>();
        for (int n = 0; n < secondNum.length(); n++) {
            secondStack.push(integer2 % 10);// 从个位开始压入栈
            integer2 = integer2 / 10;
        }
        /**
         * 两个大数开始做加法运算
         */
        int in = 0;// 每个位置上数字运算后进位
        int middle = 0;// 每个位置上相加所得结果
        Stack thirdStack = new Stack<Integer>();// 存取结果的栈
        while (!firstStack.isEmpty() || !secondStack.isEmpty()) {
            middle = (int) firstStack.pop() + (int) secondStack.pop() + in;
            thirdStack.push(middle % 10);
            in = middle / 10;
            middle = middle / 10;
        }
        while (!thirdStack.isEmpty()) {
            System.out.print(thirdStack.pop());
        }
    }
}
时间: 2024-12-17 21:43:15

栈实现两个大数相加的相关文章

C语言使用栈实现String类型的两个大数相加

要开始找工作了,记录下学习的关于数据结构的应用~~从栈开始~~ 栈和指针的应用~~~ 实现String类型的两个大数相加 主要思想是通过C语言的栈来实现,栈是后进先出的特点,因此很适合做这类计算.建立四个栈,分别按字符串字符先后顺序入栈大数的整数部分和小数部分,然后先计算小数部分的,由于小数部分是高位对齐,因此一直出栈最长小数栈的字符并进入小数结果的栈,小数位数对齐后,两个小数栈出栈进行相加.然后进行整数栈相加,由于整数部分是按低位对齐,因此直接出栈相加即可,将每位相加结果入结果整数栈.比如字符

两个大数相加 ----Javascrit 实现

(function(){ var addLarge = function(n1,n2){ var over = 0; var ret = ""; var len = Math.min(n1.length,n2.length); var sln1 = n1.substr(n1.length - len,n1.length ); var sln2 = n2.substr(n2.length - len,n2.length ); for(var i = len;i > 0; i--)

iOS中计算两个大数相加算法(OC实现)

我们知道计算机的数据类型不同,所能表示的数据量级也不相同,比如: unsigned int : 0-4294967295   int : -2147483648-2147483647 unsigned long : 0-4294967295long :  -2147483648-2147483647long long : -9223372036854775808 ~ 9223372036854775807unsigned long long : 0 ~ 18446744073709551615

两个大数相加

通过字符串数组实现两个大数相加 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 //大数的最大位数 6 #define MAX 100 7 8 //和的最大位数 9 #define N 101 10 11 int main(int argc,char *argv[]) 12 { 13 int i;//工作指针 14 int num1, num2, num3;//记录a,b两数的位数以及

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算. 算法: package stack;/********************************************************************** * @author sch ********利用栈,计算两个大数的和.大数的值超过int存储的范围******************************

HDU 1002 A + B Problem II(两个大数相加)

详细题目点击:http://acm.hdu.edu.cn/showproblem.php?pid=1002 Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20)

[ACM] ZOJ Martian Addition (20进制的两个大数相加)

Martian Addition Time Limit: 2 Seconds      Memory Limit: 65536 KB   In the 22nd Century, scientists have discovered intelligent residents live on the Mars. Martians are very fond of mathematics. Every year, they would hold an Arithmetic Contest on M

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_将表示数字的字符串从高位到低位的形式压入栈_并去除其中的空格