反向数是将一个阿拉伯数字按相反的次序写。把第一个数字写成最后一个数字,依次类推。 例如, 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
函数中,首先定义了四个变量 sum1
、sum2
、sum
和 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); // 输出结果
}