资讯专栏INFORMATION COLUMN

华为机试HJ57:高精度整数加法

AdolphLWQ / 1470人阅读

摘要:字符串的长度不超过。本题含有多组样例输入。保证字符串只含有字符输出描述输出求和后的结果示例输入输出解题思路本题通过字符串操作实现超高精度的整数加法。

作者:Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

输入两个用字符串表示的整数,求它们所表示的数之和。

字符串的长度不超过10000。

本题含有多组样例输入。

输入描述:

输入两个字符串。保证字符串只含有"0"~"9"字符

输出描述:

输出求和后的结果

示例:

输入:

98765432101234567890

输出:

11111111100

解题思路:

本题通过字符串操作实现超高精度的整数加法。首先输入两个字符串,并判断长短,长字符串为被加数,短字符串为加数;设置进位符,按长字符串倒序开始计算,当短字符串当前位大于等于0时,说明当前处于加法阶段,若两数相加大于10,则进位,刷新result字符串;当加法结束后,还要考虑进位,直到进位完全结束,将剩下的长字符串字符补位;最后别忘了分析下进位符状态,若为true,说明长字符串最高位数字还要进一下位,即前面多个1,完成。

测试代码:

#include #include using namespace std;string add(string s1, string s2){	string result,Long,Short;    // 长+短	if (s1.size() > s2.size())	{		Long = s1;		Short = s2;	}	else {		Long = s2;		Short = s1;	}	int j = Short.size() - 1;    //进位符	bool carry = false;	for (int i = Long.size() - 1; i >= 0; --i)	{        // 加法阶段		if (j >= 0)		{			int temp;			if (carry)			{				temp = int(Long[i] - "0") + int(Short[j] - "0") + 1;			}			else {				temp = int(Long[i] - "0") + int(Short[j] - "0");			}			if (temp < 10) {				result = char(temp + "0") + result;				carry = false;			}			else {				carry = true;				temp -= 10;				result = char(temp + "0") + result;			}		}        // 进位阶段		else if (carry) {			int temp = int(Long[i] - "0") + 1;			if (temp < 10) {				result = char(temp + "0") + result;				carry = false;			}			else {				carry = true;				temp -= 10;				result = char(temp + "0") + result;			}		}        // 补数阶段		else {			result = char(Long[i]) + result;		}		--j;	}    // 若最后一次操作有进位符的话,说明最终字符串还要在前面加个1,进位    if(carry)    {        result="1"+result;    }	return result;}int main(){	string s1, s2;	while (cin >> s1 >> s2)	{		cout << add(s1, s2) << endl;	}	return 0;}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119104.html

相关文章

  • 华为机试HJ77:火车进站

    摘要:要求输出所有火车出站的方案,以字典序排序输出。输入描述有多组测试用例,每一组第一行输入一个正整数输出描述输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见。 作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明...

    muzhuyu 评论0 收藏0
  • 「干货」细说 Javascript 中的浮点数精度丢失问题(内附好课推荐)

    摘要:前言最近,朋友问了我这样一个问题在中的运算结果,为什么是这样的虽然我告诉他说,这是由于浮点数精度问题导致的。由于可以用阶码移动小数点,因此称为浮点数。它的实现遵循标准,使用位精度来表示浮点数。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 问了我这样一个问题:在 chrome 中的运算...

    senntyou 评论0 收藏0
  • PHP处理数学精度

    摘要:后来我看了下,确实有这么一个扩展库,处理任意精度数字,对于任意精度的数学,提供了支持用字符串表示的任意大小和精度的数字的二进制计算。 用编程语言做计算,很多时候浮点数精度都是困扰过我的问题,即便是刚学PHP的新手也会在群里问为什么我的计算结果明显不对,而我们总是老态龙钟的丢出一句浮点数计算都存在精度问题,并没有提出过什么实质性的改善。比如下面的计算 0.57*100: zhgxun-p...

    chaos_G 评论0 收藏0
  • JavaScript浮点运算0.2+0.1 !== 0.3

    摘要:标准二进制浮点数算法就是一个对实数进行计算机编码的标准。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 浮点运算JavaScript 本文主要讨论JavaScript的浮点运算,主要包括 JavaScript number基本类型 二进制表示十进制 浮点数的精度 number 数字类型 在JavaScript中,数字只有numb...

    iflove 评论0 收藏0
  • Java基础语法知识你真的都会吗?

    摘要:而所有的数据运算都是采用补码进行的。补码解决负数加法运算正负零问题,弥补了反码的不足。通过使用访问修饰符可以使实例变量对子类可见暂时在学习基础语法知识的时候可以暂时忽略实例变量这部分内容,这部分内容主要被使用在面向对象的部分,但是极其重要。 showImg(https://segmentfault.com/img/remote/1460000019264541?w=600&h=242)...

    DirtyMind 评论0 收藏0

发表评论

0条评论

AdolphLWQ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<