由于本题要求的数字位数很长,所以C++基本类型无法满足要求,需要用的char数组或者string。
对于string来说,每一位也是char类型,不过输入输出更加方便,所以本题使用string类型存储超长的数字,并对其进行加法计算。
#include <iostream>
#include <string>
using namespace std;
string Sum(string &, string &);
int main()
{
int n;
string str1, str2;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> str1 >> str2;
cout << "Case " << i << ":" << endl;
cout << str1 << " + " << str2 << " = " << Sum(str1, str2) << endl;
if (i < n)
cout << endl;
}
return 0;
}
string Sum(string &s1, string &s2)
{
string big, small; //区分两个数的大小(位数),将小的数加到大的数上
int a = s1.length();
int b = s2.length();
if (a >= b)
{
big = s1;
small = s2;
}
else
{
small = s1;
big = s2;
}
int bigLen = big.length();
int smallLen = small.length();
for (int i = bigLen - 1, j = smallLen - 1; j >= 0; i--, j--)
{
big[i] = big[i] + small[j] - '0'; //从后向前依次对每一位相加
}
for (int i = bigLen - 1; i > 0; i--)
{
if (big[i] > '9') //从后向前判断每一位是否需要进位(第一位除外)
{
big[i] = big[i] - 10;
big[i - 1]++;
}
}
if (big[0] > '9') //判断第一位是否需要进位
big = "1" + big;
return big;
}
知识点:
- char字符以ASCII的形式存储,两个char字符相加,实际是它们的ASCII相加。
- 两个char字符相加后,如果直接输出,则是它们ASCII的和,想要输出对应的字符,必须将结果赋值给char类型的变量,或者强制转换为char类型。
- 两个数字字符相加后,如果想输出整数状态下的结果,需要减去0的ASCII,即减去‘0’。
- 代码中的函数也可以不使用引用,采取按值传递的方式,采取按引用传递不需要创建临时变量,能够节省内存。
注意输出格式,每个结果之间要有空行,最后一个结果输出后不需要空行。
继续加油。
本文介绍如何使用C++的string类型处理超长数字的加法运算,通过比较两个字符串长度并进行逐位相加,实现大数字的计算。
1015

被折叠的 条评论
为什么被折叠?



