文章

7

粉丝

502

获赞

2

访问

16.4k

头像
大整数加法 题解:c++版本
P1474 武汉大学2018年机试题
发布于2024年2月10日 19:02
阅读数 840

#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm> 
using namespace std;

string add(string a, string b)
{
	if (a.length() < b.length())  a.swap(b);//a为较长的字符串
	string ans(a.length(), 0);//初始化长度为较长字符串的长度
	b.insert(0, a.length() - b.length(), '0');//短字符串前面补零,长度相等方便计算 
	/*s.insert(a, b, c)表示在s字符串的a位置前插入b个字符c*/
	
	int c = 0;//进位
	for (int i = a.length() - 1; i >= 0; i--)//从末尾开始逐位运算 
	{
		int sum = (a[i] - '0') + (b[i] - '0') + c ;//计算当前位相加结果,要加上一位的进位值 
		c = sum / 10;//按照十进制运算的规则,当前位相加结果大于等于10,则需要进位,进位的值即为当前相加结果除以10的商。
		             //如99 + 98,9 + 8 = 17,进位为 17 / 10 = 1 
		
		ans[i] = sum % 10 + 48;
		/*I.计算了当前位相加后应显示的结果,并将结果转换为字符存储到结果字符串 ans 的相应位置。
		  II.由于通常的十进制运算下,每位数字的取值范围为 0 到 9,因此对10取模可以得到当前位的值,
		  如99 + 98, 个位的9 + 8 = 17,进位为1,显示的结果为 17 % 10 = 7
		  III.运算的结果再加上字符 '0' 的 ASCII 值,或是 + '0', 即可得到该位对应的字符表示*/
	}
	if (c != 0)
		ans.insert(ans.begin(), c + 48);//如果最高位有进位,将进位加到结果的最前面
		               ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发