链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
给定一个正整数,你需要计算这个整数和它对应的反转数的和,例如,输入1234,你应该输出1234 + 4321 = 5555。注意该正整数可能很大(但小于或等于10^25)。
输入描述:
输入有多个测试用例,每个是一个不大于10^25正整数
输出描述:
输出该整数和其反转数的和,按样例输出指定的格式进行输出

题目分析:
这个题目易错的点有:
-
对于正整数,可能会有前导零,需要特别处理。
-
反转数可能会有前导零,需要特别处理。
-
如果使用 long long 类型进行计算,可能会溢出,需要使用高精度计算。
这个题目考察的内容有:
-
字符串的处理,包括字符串转换成整数和字符串倒序。
-
高精度加法计算,包括高精度整数的定义、高精度加法的实现和高精度整数的输出。
-
代码的实现能力,包括代码的正确性、代码的效率和代码的可读性。
在解决这个问题时,需要注意以上易错的点,并且熟练掌握字符串的处理和高精度计算的方法。同时,需要编写高质量的代码,保证代码的正确性、效率和可读性。
代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 100010;
// 定义一个高精度整数类
struct BigInt
{
int len, s[MAX_N];
BigInt()
{
// 构造函数,将 s 数组清零,长度设为 1
memset(s, 0, sizeof(s));
len = 1;
}
BigInt(int num)
{
// 构造函数,将 num 转换成高精度整数
*this = BigInt();
while (num)
{
s[len++] = num % 10;
num /= 10;
}
len--;
}
BigInt(const char* num)
{
// 构造函数,将字符串 num 转换成高精度整数
*this = BigInt();
int l = strlen(num);
for (int i = 0; i < l; i++)
{
s[i] = num[l - i - 1] - '0';
}
len = l;
}
BigInt operator + (const BigInt& b) const
{
// 重载加法运算符
BigInt c;
c.len = 0;
for (int i = 0, g = 0; g || i < max(len, b.len); i++)
{
int x = g;
if (i < len) x += s[i];
if (i < b.len) x += b.s[i];
c.s[c.len++] = x % 10;
g = x / 10;
}
return c;
}
void clean()
{
// 去除高位的零
while (len > 1 && !s[len - 1]) len--;
}
void print()
{
// 输出高精度整数
for (int i = len - 1; i >= 0; i--)
{
printf("%d", s[i]);
}
}
};
int main()
{
char s[MAX_N];
while (scanf("%s", s) == 1)
{
// 将字符串 s 转换成高精度整数 x
BigInt x(s), y;
int n = x.len;
for (int i = 0; i < n; i++)
{
y.s[i] = x.s[n - i - 1]; // 计算反转数
}
y.len = n;
// 计算 x 和 y 的和
BigInt z = x + y;
// 输出结果
printf("%s + ", s);
y.print(); // 输出反转数
printf(" = ");
z.clean();
z.print();
printf("\n");
}
return 0;
}
个人心得:
在解决这个问题时,需要注意字符串的处理和高精度计算的方法。对于字符串的处理,需要熟悉字符串的基本操作,包括字符串转换成整数和字符串倒序。对于高精度计算,需要熟悉高精度整数的定义、高精度加法的实现和高精度整数的输出。
同时,在编写代码时,需要注意代码的正确性、效率和可读性。在实现高精度加法时,可以使用高精度整数类来简化代码。在输出高精度整数时,需要注意去除高位的零和输出反转数。在处理前导零时,可以使用一个变量记录前导零的数量,并在输出时特别处理。
总的来说,这个问题虽然看似简单,但是涉及到了字符串的处理和高精度计算,需要综合运用多种知识点来解决。通过解决这个问题,可以提高对字符串和高精度计算的理解和应用能力,同时也可以提高编写高质量代码的能力。