2007叶光津


私信TA

用户名:uq_70078723231

访问量:5461

签 名:

工资1800,每日笑哈哈

等  级
排  名 580
经  验 4078
参赛次数 1
文章发表 14
年  龄 0
在职情况 学生
学  校 湖北生物科技职业学院
专  业

  自我简介:

TA的其他文章

解题思路:和1475题一样,1475题目链接:https://www.dotcpp.com/oj/problem1475.html

由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组nums1,nums1[0]用于存储a的个位,nums1[1]用于存储a的十位,依此类推。同样可以用一个数组nums2来存储b。
计算a  +  b的时候,首先将nums1[0]与nums2[0]相加,如果有进位产生,则把进位(即和的十位数)用一个进位变量oldJ存起来,把和的个位数存入nums1[0],即nums1[0]等于(nums1[0]+nums2[0])%10。然后计算nums1[1]与nums2[1]相加,这时还应将低位进上来的值oldJ也加起来,即nums1[1]应该是nums1[1]、nums2[1]和oldJ三个数的和.

使用两个进位,可以避免在计算nums[i]之前计算好进位,就不能在这一轮使用进位了,如果在计算nums[i]后计算进位,因为nums[i]的值发生改变,所以进位的值也被改变的问题。

参考代码:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		int[] nums1 = new int[10000];
		int[] nums2 = new int[10000];
		
		Scanner scanner = new Scanner(System.in);
		
		// 输入处理第一个数
		String inputs = scanner.next();
		char[] input1 = inputs.toCharArray();

		for (int i = 0; i < input1.length; i++) {
			nums1[i] = input1[input1.length - 1 - i] - '0';
		}
		// 输入处理第二个数
		inputs = scanner.next();
		char[] input2 = inputs.toCharArray();
		for (int i = 0; i < input2.length; i++) {
			nums2[i] = input2[input2.length - 1 - i] - '0';
		}
		
		// 如果两个数都是0,输出0;
		if(input1[0]=='0'&&input2[0]=='0')
		{
			System.out.println("0");
			return;
		}
		
		
		int maxLength = input1.length>input2.length?input1.length:input2.length;
		int oldJ = 0; // 旧的进位
		int newJ = 0; // 新的进位
		
			for (int i = 0; i <= maxLength; i++) {
				newJ = (oldJ + nums1[i] + nums2[i]) / 10;
				nums1[i] = (oldJ + nums1[i] + nums2[i]) % 10;
				oldJ = newJ;
			}
		
		
		boolean b = true; // 当遇见第一个非0的数的时候,关闭开关,后面的数直接打印
		for (int i = nums1.length - 1; i >= 0; i--) {
			if (nums1[i] == 0 && b) {
				continue;
			}
			b = false;
			System.out.print(nums1[i]);
		}
	}
}


 

0.0分

3 人评分

  评论区

膜拜大佬!太厉害了!
2021-03-25 17:12:38
  • «
  • 1
  • »