解题思路:和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 人评分
点我有惊喜!你懂得!浏览:1462 |
C语言程序设计教程(第三版)课后习题8.1 (Java代码)浏览:828 |
这可能是一个假的冒泡法浏览:1071 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:827 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:1052 |
简单的a+b (C语言代码)浏览:674 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:646 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:943 |
1128题解(返回值为数组的情况)浏览:571 |
2007叶光津 2021-03-25 17:15:51 |
哇!!谢谢!你也很厉害哟!!