PTA 7-261 大整数A+B

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:倒序输出结果数组的每一位
注:输出格式

归属知识点:
数组
函数
选择结构
循环结构

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值