刷题:数的翻转

2023-04-07 19:00:21 浏览数 (4)

数的翻转

题目描述:

代码语言:javascript复制
题目描述:所谓数的翻转就是将一个数的第一位变成最后一位,第二位变成倒数第二位……。
比如1234经过翻转后变成了4321。当然了,翻转后的数字是不能有前导零的,如100翻转后得到1,
这就意味着21可能是由12或者120或者1200等翻转得到的。
现在给出两个数字A和B,它们各自翻转后得到的数的和是C,请你输出C翻转后的结果。
输入:第一行输入一个正整数T(1 <= T <= 10),表示有T组测试数据。
对于每组测试数据:输入两个整数A、B(1 <= A 、B<= 10^5)。
输出:对于每组测试数据输出一行,每行包括一个整数,表示最终的结果
(最终结果不能有前导零,如03是不被允许的)。
样例:
输入样例 1
3
24 1
4358 754
305 794
输出样例 1
34
1998
1

思路

本题难点就是如何将一个整数a进行翻转?并且翻转数字a后对于前导零怎么处理? 比较简单的一种做法就是将整数a先转成字符串sA,然后对字符串sA进行翻转(可以借助标准库std::reverse函数,也可以用前后双指针替换前后元素) ,然后再将字符串sA转换成整数即可。

C 实现

代码语言:javascript复制
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

// 将一个数翻转
int ReverseNum(int x)
{
    string s = std::to_string(x);
    std::reverse(s.begin(), s.end());
    return stoi(s);
}

// 输入两个数A和B,将A和B翻转后相加得到C,再将C翻转
int GetResult(int A, int B)
{
    int C = ReverseNum(A)   ReverseNum(B);
    return ReverseNum(C);
}

int main()
{
    string tStr;
    int T;
    vector<vector<int>> numVec;
    getline(cin, tStr);
    T = stoi(tStr);
    for (int i = 0; i < T; i  ) {
        int A, B;
        cin >> A >> B;
        numVec.push_back({ A, B });
    }

    for (int i = 0; i < numVec.size(); i  ) {
        std::cout << GetResult(numVec[i][0], numVec[i][1]) << std::endl;
    }

    return 0;
}

0 人点赞