华为机试-057-中等-HJ57.高精度整数加法
一、描述
输入两个用字符串 str 表示的整数,求它们所表示的数之和。
数据范围:1 ≤ len(str) ≤ 10000
1.1、输入描述
- 输入两个字符串。保证字符串只含有’0’~'9’字符
1.2、输出描述
- 输出求和后的结果
二、示例
2.1、示例1
输入:
9876543210
1234567890
输出:
11111111100
三、答案(java)
3.1、方法一
题目的主要信息:
输入两个字符串表示的整数,对其进行相加运算
字符串中只有字符0-9,即正整数加法运算
字符串长度:1<=n<=100001<=n<=100001<=n<=10000
方法一:遍历相加
具体做法:
从两个字符串末尾开始往前遍历每个字符,直到遍历到两个字符串的下标都为0. 将遍历到的字符串转化为数字,如果其中一个字符串已经过了首部,则直接数字记为0.
然后将两个数字与进位变量相加,取余数放入现在这位,整除10作为进位,初始进位变量为0。最后结束之后如果进位变量还有1,则添加在后面。
最后将其逆序并转成字符串输出即可。
package com.tzq.hwod;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String s1 = scan.next();
String s2 = scan.next(); // 输入两个数
String res = add(s1, s2); // 输出
System.out.println(res);
}
}
private static String add(String s1, String s2) { // 两个字符串整数相加
StringBuilder res = new StringBuilder();
int n = s1.length() - 1;
int m = s2.length() - 1;
int carry = 0; // 进位
while (n >= 0 || m >= 0) { // 从两个人字符串最后一位开始相加
char c1 = n >= 0 ? s1.charAt(n--) : '0'; // 没有了就用0代替
char c2 = m >= 0 ? s2.charAt(m--) : '0';
int sum = (c1 - '0') + (c2 - '0') + carry; // 两个数子与进位相加
res.append(sum % 10); // 余数添加进结果
carry = sum / 10; // 进位
}
if (carry == 1) { // 最后的进位
res.append(carry);
}
return res.reverse().toString(); // 反转后转成字符串
}
}
四、答案(python 3)
4.1、方法一
题目分析
题目给出两个字符串,含义为两串数字
我们要返回数字加和之后的结果,以字符串的格式输出
方法一:python大整数处理
实现思路
python语言支持大整数,不受位数限制
因此转成整型之后直接相加即可
#!/usr/bin/python
# -*- coding: UTF-8 -*-
while True:
try:
n1 = int(input())
n2 = int(input())
print(n1+n2) # 直接输出整型数字相加之和的结果
except:
break