`
endual
  • 浏览: 3566612 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

两个正整数相加

 
阅读更多

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

public class T {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner cin = new Scanner(System.in);
		String a, b;
		a = cin.next();
		b = cin.next();
		
		char f1 = a.charAt(0) ;
		char f2 = b.charAt(0) ;

		if(a.length() < b.length()) {
		
			String temp = a ;
			a = b ;
			b = temp ;
			
		}
		
		
		
		// TODO Auto-generated method stub
		Stack stacka = new Stack();
		Stack stackb = new Stack();
		String ab = a;
		System.out.println("-----a-------" +ab);
		while (ab.length() != 0) {
			
			char c = ab.charAt(0);
			String subab = ab.substring(1);
			stacka.push(c) ;
			ab = subab ;
		}
		
		String abc = b;
		System.out.println("-----b-------" +abc);
		while (abc.length() != 0) {
			
			char c = abc.charAt(0);
			String subabc = abc.substring(1);
			stackb.push(c) ;
			abc = subabc ;
		}

		Stack sum = new Stack();
		int temp = 0;
		int t = 0;
		while (!stacka.isEmpty() && !stackb.isEmpty()) { // 如果两个里面其中有一个是空了,那么停止

			int aInt = Integer.parseInt(stacka.pop().toString());
			int bInt = Integer.parseInt(stackb.pop().toString());
			temp = aInt + bInt + t;
			if (temp < 10) {
				sum.push(temp);
				t = 0;
			} else {

				String tempS = temp + ""; // 将temp转换成String类型,此时是两位数sumAB 10-19
				t = 1; // 将t设置成为1,此时将sumAB的1取得
				char c1 = tempS.charAt(1); // 取得sumAB的个位数
				temp = Integer.parseInt(c1 + ""); // 将个位数转换成int类型赋值给temp
				sum.push(temp); // 添加到栈中去
			}

		}// end while ;



	while(!stacka.isEmpty()) {
		
		int aInt = Integer.parseInt(stacka.pop().toString());
		temp = aInt + t;
		if (temp < 10) {
			sum.push(temp);
			t = 0;
		} else {

			String tempS = temp + ""; // 将temp转换成String类型,此时是两位数sumAB 10-19
			t = 1; // 将t设置成为1,此时将sumAB的1取得
			char c1 = tempS.charAt(1); // 取得sumAB的个位数
			temp = Integer.parseInt(c1 + ""); // 将个位数转换成int类型赋值给temp
			sum.push(temp); // 添加到栈中去
		}
		
	}
	if(t==1) {
		
		sum.push(t+"") ;
	}
	String s = "" ;
	while (!sum.isEmpty()) { // 如果两个里面其中有一个是空了,那么停止

		s = s+sum.pop().toString();
		
	}
	System.out.println(s);
		} //end main
} //end clsss

 

 

今天在杭电的ACM上写第一题,确实是考研人智慧的。想法非常重要,虽然还没用做出来,但是算是想法出来了。思路是这样的,模拟人的做法。

 

1.输入字符串a,将字符一个一个的压入到栈A中

2.输入字符串b,将字符串一个一个的压入到栈B中

3.从A中和B中分别弹出一个出来相加为K

4.如果如果K<10,那么压入到栈Sum中,如果K>10,那么将0压入到栈中,1保留。判断两个栈是不是为空。

5.goto 3,并且将结果加上1

。。。。。。。。。。。。。。。。

就这么做下去。

 

 

但是遇到了,如果是有符号的整数就麻烦了,相当于负数+整数是减法了,呵呵,又要重新做过了。

 

有没有更好的办法呢 ??

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    (数据结构与算法)两个大整数相加

    当我们处理大整数运算时,如两个大整数相加,传统的简单算法可能不再适用,因为它们可能会导致溢出或者效率低下。这篇博客文章“(数据结构与算法)两个大整数相加”提供了一个解决方案来应对这个问题。 首先,我们...

    两个十以内的整数相加

    两个十以内的整数相加

    两个无限长的正整数相加减

    本程序实现了两个无限长的正整数相加减,使用数组实现。

    超长正整数相加(string逆序逐位相加再反转)1

    首先,我们要理解输入是两个字符串,它们分别存储了两个正整数。在C++中,字符串通常用`std::string`类型表示。字符串的每个字符对应一个数字位,例如,字符串"123"表示整数123。因此,我们需要对字符串进行逆序操作...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    大整数的四则运算高质量C语言程序.doc

    * int plus(int a[],int b[],int c[],int m,int n):两个正整数相加 * void change(int a[],int b[],int m,int n):当两异号数相加时,改变其符号以符合加法运算 * int minus(int a[],int b[],int d[],int m,int n)...

    c语言 利用字符数组实现两个大整数的加减法.exe

    c语言 利用字符数组实现两个大整数的加减法.exe

    python编写程序,生成10个随机整数,其中的奇数相加,偶数相加,结果进行输出两个和

    python编写程序,生成10个随机整数,其中的奇数相加,偶数相加,结果进行输出两个和。

    C语言编程技巧汇萃.rar

    检测磁盘是否准备就绪 检测磁盘是否写保护 修改文件的某一行 成批拷贝文件 拷贝一个文件 建立目录 得到目录 得到文件名 任意两个正整数相加(位) 任意两个正整数相乘

    calculation.iml

    两个正整数相加程序

    用递归法计算从n个正整数中选择k个数的不同组合数

    在计算机科学和数学中,计算从n个正整数中选择k个数的不同组合数是一项基本的任务,这涉及到组合数学中的组合(Combination)概念。组合是指从一个集合中不考虑顺序取出k个元素的方法数,它与排列(Permutation)...

    数据结构试验报告

    实验一:线性表的应用算法:构造一个递增有序的正整数链表,实现链表分解为一个奇数表和一个偶数表,之后再将两个链表合并一个递减链表。 实验二:线性表的应用算法:构造两个按指数递增的有序链表,实现两个一元...

    计算器源文件_java_数学_

    1. **加法(Addition)**:`add(int num1, int num2)` 方法将两个正整数相加。这可以通过使用 `+` 运算符直接完成,例如 `return num1 + num2;`。 2. **减法(Subtraction)**:`subtract(int num1, int num2)` ...

    实验二计算机中的数据表示与计算.docx

    例如,当两个正整数相加导致结果超过最大值,或两个负整数相减导致结果低于最小值时,就会发生溢出。 在浮点数表示中,小数点的位置可以浮动,以适应不同大小的数值。例如,3.141592653589793238462643383279的二...

    实现2个大数(80位左右)相加

    实现2个80位左右的大数相加,暂时不支持负数,只支持正整数。

    青岛版一年级数学上册加减混合运算练习(带答案).pdf

    对于加法而言,两个正整数相加,其和仍为正整数;对于减法,从一个数中减去另一个比它小的正整数,结果仍然为正整数。 4. 运算符号和等号的理解:等号 "=" 表示等式两侧的数相等,它用来引导学生检查自己的计算结果...

    一个数分成几个连续整数和

    标题中的“一个数分成几个连续整数和”指的是在数学领域中的一种问题类型,它涉及到将一个给定的正整数表示为若干个连续整数的和。这种问题在算法设计、数学竞赛以及数据分析中都有可能出现。连续整数和的问题通常...

    python 和为s的连续正数序列,输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数

    # 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 # 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 # 输入示例 # 输入:target = 9 # 输出:[[2,3,4],[4,5]...

    C语言做任意大的两整数相加减

    数组的每个元素代表大数的一部分,例如,一个数组可以表示一个正整数,数组中的元素从低位到高位依次存储每一位数字。 1. 大数的表示: 我们可以定义一个结构体来表示大数,结构体包含一个整型数组和数组长度两个...

    奥林匹克金牌之路(信息学).doc

    - 文件只有一行,即两个正整数相加后的和。 **示例:** ``` Input.txt: 123 872 Output.txt: 995 ``` **解决方案步骤:** 1. **数据的接收及存储问题:** - 由于数字可能非常大,无法用常规的数据类型来存储,...

Global site tag (gtag.js) - Google Analytics