杭电OJ 1002(C++)

杭电OJ 专栏收录该内容
169 篇文章 2 订阅

由于本题要求的数字位数很长,所以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;
}

知识点:

  1. char字符以ASCII的形式存储,两个char字符相加,实际是它们的ASCII相加。
  2. 两个char字符相加后,如果直接输出,则是它们ASCII的和,想要输出对应的字符,必须将结果赋值给char类型的变量,或者强制转换为char类型。
  3. 两个数字字符相加后,如果想输出整数状态下的结果,需要减去0的ASCII,即减去‘0’。
  4. 代码中的函数也可以不使用引用,采取按值传递的方式,采取按引用传递不需要创建临时变量,能够节省内存。

注意输出格式,每个结果之间要有空行,最后一个结果输出后不需要空行。

继续加油。

  • 2
    点赞
  • 6
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值