字符串的相加

package demo_1121;

public class DEMO {

	public DEMO() {
		// TODO Auto-generated constructor stub
	}
	
	
	
	
	
	//输入的两个用字符串标示的整数,求他们的送标示的数之和
	//字符串的长度不超过10000
	//本题含有多组样例输入
	
	
		public static void main(String[] args) {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	        String line;
	        while ((line = br.readLine()) != null && line.length() > 0) {
	            System.out.println(add(line.trim(), br.readLine().trim()));
	        }
	        
	        static String add(String s1, String s2) {
	            if (s1.length() == 0 || s2.length() == 0)
	                return "";
	            boolean neg1 = s1.charAt(0) == '-';
	            boolean neg2 = s2.charAt(0) == '-';
	      
	            if (!(neg1 ^ neg2)) {
	                if (s1.length() < s2.length()) {
	                    String temp = s1;
	                    s1 = s2;
	                    s2 = temp;
	                }
	            } else if (neg1) {
	                if (s1.length() < s2.length() + 1) {
	                    String temp = s1;
	                    s1 = s2;
	                    s2 = temp;
	                    neg1 = false;
	                    neg2 = true;
	                }
	            } else if (neg2) {
	                if (s1.length() + 1 < s2.length()) {
	                    String temp = s1;
	                    s1 = s2;
	                    s2 = temp;
	                    neg1 = true;
	                    neg2 = false;
	                }
	            }
	      
	            int[] lmax = new int[neg1 ? s1.length() - 1 : s1.length()];
	            for (int i = neg1 ? 1 : 0; i < lmax.length; ++i)
	                lmax[i] = s1.charAt(i) - '0';
	            int[] lmin = new int[neg2 ? s2.length() - 1 : s2.length()];
	            for (int i = neg2 ? 1 : 0; i < lmin.length; ++i)
	                lmin[i] = s2.charAt(i) - '0';
	      
	            int i = lmax.length - 1, j = lmin.length - 1;
	            if (!(neg1 ^ neg2)) {
	                int[] carry = new int[1];
	                while (j >= 0) {
	                    add(lmax, i, lmin[j], carry);
	                    --i;
	                    --j;
	                }
	                StringBuilder sb = new StringBuilder();
	                if (neg1)
	                    sb.append('-');
	                if (carry[0] == 1)
	                    sb.append(1);
	                for (i = 0; i < lmax.length; ++i)
	                    sb.append(lmax[i]);
	                return sb.toString();
	            } else {
	                int flag = 0;
	                boolean neg = true;
	                if (i == j) {
	                    flag = -1;
	                    for (int k = 0; k <= i; ++k) {
	                        if (lmax[k] > lmin[k]) {
	                            flag = 0;
	                            neg = neg1;
	                            break;
	                        } else if (lmax[k] < lmin[k]) {
	                            flag = 1;
	                            neg = neg2;
	                            break;
	                        }
	                    }
	                }
	                if (flag == -1)
	                    return "0";
	                if (flag == 1) {
	                    int[] temp = lmax;
	                    lmax = lmin;
	                    lmin = temp;
	                }
	                while (j >= 0) {
	                    minus(lmax, i, lmin[j]);
	                    --i;
	                    --j;
	                }
	                int L = 0;
	                for (i = 0; i < lmax.length; ++i) {
	                    if (lmax[i] == 0) {
	                        ++L;
	                    } else {
	                        break;
	                    }
	                }
	                StringBuilder sb = new StringBuilder();
	                if (neg)
	                    sb.append('-');
	                for (i = L; i < lmax.length; ++i)
	                    sb.append(lmax[i]);
	                return sb.toString();
	            }
	        }
	      
	        static void add(int[] lmax, int i, int val, int[] carry) {
	            if (i == -1) {
	                carry[0] = 1;
	                return;
	            }
	            lmax[i] += val;
	            if (lmax[i] >= 10) {
	                lmax[i] = lmax[i] - 10;
	                add(lmax, --i, 1, carry);
	            }
	        }
	      
	        static void minus(int[] max, int i, int val) {
	            max[i] -= val;
	            if (max[i] < 0) {
	                max[i] = max[i] + 10;
	                minus(max, --i, 1);
	            }
	        }
	      
	    }
	    4	
	    	
		}
		
		
		
		

}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值