7-261 大整数A+B
分数 10
作者 HDOJ
单位 绍兴文理学院
输入两个整数A、B,求 A + B。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入2个正整数A、B。整数可能很大,但每个整数的位数不会超过1000。
输出格式:
对于每组测试输出两行数据;第一行输出"Case #:",#表示测试组号,第二行输出形式为“A + B = Sum”,Sum表示A+B的结果。每两组测试数据之间空一行。
输入样例:
2
1 2
88888888888888888888888 11111111111111111111111
输出样例:
Case 1:
1 + 2 = 3
Case 2:
88888888888888888888888 + 11111111111111111111111 = 99999999999999999999999
出处:
HDOJ 1002
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1005
// 定义存储字符串的数组
char str1[MAX_LEN], str2[MAX_LEN];
char res[MAX_LEN];
// 定义加法函数
void add(char str1[], char str2[]){
// 记录字符串长度
int len1 = strlen(str1), len2 = strlen(str2);
int len = len1 > len2 ? len1 : len2;
// 遍历两个字符串,对对应位置进行加法运算
for (int i = 0; i < len; i++){
// 如果字符串1有对应位置,累加结果数组
if (i < len1) res[i] += str1[len1 - i - 1] - '0';
// 如果字符串2有对应位置,累加结果数组
if (i < len2) res[i] += str2[len2 - i - 1] - '0';
// 如果进位,则将进位标志累加到下一位
if (res[i] > 9){
res[i] -= 10;
res[i + 1]++;
}
}
// 确定最终结果数组的长度
if (res[len])
len++;
// 倒序输出结果数组的每一位
for(int i = len - 1; i >= 0; i--){
putchar(res[i] + '0');
}
}
int main(){
// 记录测试数据的数量
int t;
scanf("%d", &t);
// 遍历每组测试数据
for (int i = 1; i <= t; i++){
// 初始化结果数组
memset(res, 0, sizeof res);
// 读取两个字符串
scanf("%s %s", str1, str2);
// 输出每组测试数据的编号、两个字符串以
printf("Case %d:\n%s + %s = ", i, str1, str2);
add(str1, str2);
if (i < t)
puts("\n");
else
puts(""); //每组数据的换行
}
return 0;
}
解题思路:
step1:遍历测试数据
step2:记录字符串长度并且遍历两个字符串,对对应位置进行加法运算
step3:确定最终结果数组的长度
step4:倒序输出结果数组的每一位
注:输出格式
归属知识点:
数组
函数
选择结构
循环结构