PTA - 反向数相加(详解)

反向数是将一个阿拉伯数字按相反的次序写。把第一个数字写成最后一个数字,依次类推。 例如, 1245的反向数为5421。请注意,数字所有的前导零要被省略,所以,如果数字结尾有零,写反向数时零被略去(例如,1200的反向数是21)。还要注意反向数没有零结尾。
你的任务是将两个反向数相加,并输出它们的反向和。当然,结果不是唯一的,因为一个数可以是几个数的反向形式(例如21在反向前可以是12,120 或1200)。为此,本题设定没有0因为反向而丢失(例如,设定原来的数是12)。

输入格式:

输入由N个测试用例组成。输入的第一行仅给出正整数N,然后给出测试用例。每个测试用例一行,由2个由空格分开的正整数组成,这是要反向相加的数。

输出格式:

对每个测试用例,输出一行,仅包含一个整数,将两个反向数进行求和,之后再反向。在输出时把前导0略去。

输入样例:

3
24 1
4358 754
305 794

输出样例:

34
1998
1

我的答案: 

 

  在 main 函数中,首先使用 scanf 输入测试用例的数量 n。接下来,通过一个循环处理每个测试用例。在循环中,用 scanf 分别输入两个要反向相加的整数 n1 和 n2。然后调用 reverse 函数进行反向相加。

  在 reverse 函数中,首先定义了四个变量 sum1sum2sum 和 result 来存储计算过程中的结果。接下来,分别计算 n1 和 n2 的反向数,方法是将每一位的数字取出并按相反的顺序组合起来。然后将两个反向数相加得到 sum

  计算 sum 的反向数,方法与计算 n1 和 n2 的反向数相同,将每一位的数字取出并按相反的顺序组合起来。最终的结果存储在 result 中。

  最后,通过 printf 输出结果。注意,题目要求在输出时省略前导零。

#include <stdio.h>

// 反向相加函数
void reverse(int n1, int n2);

int main(void)
{
    int n;  // 测试用例的数量
    scanf("%d", &n);

    // 循环处理每个测试用例
    for (int i = 0; i < n; i++)
    {
        int n1, n2;
        scanf("%d %d", &n1, &n2);  // 输入要反向相加的两个整数
        reverse(n1, n2);  // 调用反向相加函数
    }

    return 0;
}

void reverse(int n1, int n2)
{
    int sum1 = 0, sum2 = 0, sum = 0, result = 0;

    // 计算 n1 的反向数
    while (n1 > 0)
    {
        sum1 *= 10;
        int digit = n1 % 10;  // 取出个位数字
        sum1 += digit;  // 将个位数字添加到 sum1 中
        n1 /= 10;  // 去除个位数字,继续处理下一位数字
    }

    // 计算 n2 的反向数
    while (n2 > 0)
    {
        sum2 *= 10;
        int digit = n2 % 10;  // 取出个位数字
        sum2 += digit;  // 将个位数字添加到 sum2 中
        n2 /= 10;  // 去除个位数字,继续处理下一位数字
    }

    sum = sum1 + sum2;  // 对两个反向数进行相加

    // 计算相加后的结果的反向数
    while (sum > 0)
    {
        result *= 10;
        int digit = sum % 10;  // 取出个位数字
        result += digit;  // 将个位数字添加到 result 中
        sum /= 10;  // 去除个位数字,继续处理下一位数字
    }

    printf("%d\n", result);  // 输出结果
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值