问题
1218: 反转a+b
时间限制: 1 Sec 内存限制: 128 MB
提交: 2456 解决: 1479
题目描述
这是一个简单的问题,给你两个正整数a,b(0<=a,b<=2^31),然后把a和b反转然后相加;具体看样例;
输入
每组首先输入一个整数t,表示有t组数据。
以后每组数据占一行,且为两个整数a和b(没有前导0)。
输出
对于每组数据 ,输出数字反转相加后的结果。每组占一行。没有前导0!
样例输入 Copy
3
20 30
101 2
123 340
样例输出 Copy
5
103
364
来源/分类
2010校赛
代码
小白码
#include <iostream>
#include <string>
using namespace std;
long long delZero(long long num);
long long reverseNum(long long num1);
int main() {
long long Kase;
long long num1, num2;
long long sum = 0;
cin >> Kase;
while (Kase--) {
cin >> num1 >> num2;
num1 = delZero(num1);
num2 = delZero(num2);
num1 = reverseNum(num1);
num2 = reverseNum(num2);
sum = num1 + num2;
cout << sum << endl;
}
return 0;
}
long long delZero(long long num) { // 删除数字后边的0
if (num == 0) return 0;
else {
while(num % 10 == 0) {
num /= 10;
}
}
return num;
}
long long reverseNum(long long num1) {
string tmp = to_string(num1); // 整数转换成string
string rtmp = "";
for (auto itr = tmp.end() - 1; itr != tmp.begin() - 1; itr--) {
rtmp += *itr; // 逆向拼接
}
return stoll(rtmp); // 转换成long整数
}
大佬码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL; //可能爆int,用long long
int main()
{
LL T;
scanf("%lld", &T);
while (T--)
{
LL a, b;
scanf("%lld%lld", &a, &b);
LL A = 0, B = 0;
while (a > 0) //分解
{
A = A * 10 + a % 10; // a % 10 可以过滤掉"后缀0"
a /= 10;
}
while (b > 0)
{
B = B * 10 + b % 10;
b /= 10;
}
printf("%lld\n", A + B);
}
return 0;
}
小谈
long long long long ago, now it’s for long long long integer!!!
Keep marching!