算法学习016 高精度加法运算 c++算法学习 中小学算法思维学习 比赛算法题解 信奥算法解析

avatar
作者
猴君
阅读量:0

目录

C++高精度加法运算

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、运行结果

五、考点分析

六、推荐资料


C++高精度加法运算

一、题目要求

1、编程实现

用高精度算法实现两个数:m和n,m和n的位数在1到100之间

2、输入输出

输入描述:第一行m,第二行输入n,且m和n的位数在1到100之间

输出描述:只有一行,m和n相加的和

输入样例:

1234567887654321  8765432187687654

输出样例:

10000000075341975

二、算法分析

  1. 高精度加法算法的基本思想是将大整数按位进行计算,从低位到高位逐个相加,同时需要考虑进位的情况。
  2. 由于位数已经超出常规数据类型,所以需要将相加的数据以字符串的形式读入
  3. 将字符串翻转存入整型数组中,两数之和的位数最大为较大数的位数加 1
  4. 从低位到高位依次两两相加后,再加上上一位的进位,将和模 10 作为本位结果,将和除以 10作为下一位的进位
  5. 重复步骤 4,直到所有位数处理完,
  6. 从后往前找结果数组中第一个非0元素的位置(即去前导 0操作),从该位置开始逆序输出数组中的元素,即为最终的加法结果。

三、程序编写

#include<bits/stdc++.h> #include<string> using namespace std; int A[102],B[102],C[102]; //将字符串转换为对应的整形数组  int getInt(int t[],string s) { 	int len = s.length();  	for(int i=0;i<len;i++) 	{ 		t[i] = s[len-i-1]-'0'; 	} 	return len; } int main() { 	string s1,s2; 	cin >> s1 >> s2; 	int lena = getInt(A,s1); 	int lenb = getInt(B,s2); 	int lenc = max(lena,lenb); 	int k = 0; 	//进行逐位相加,k作为进位标识  	for(int i=0;i<lenc;i++) 	{ 		C[i] = (A[i] + B[i] + k) % 10; 		k = (A[i] + B[i] + k) / 10; 	}  	C[lenc] = k;//最高位 	//去前导0  	while(C[lenc] == 0 && lenc > 0)  	{ 		lenc--; 	}  	for(int i=lenc;i>=0;i--) 	{ 		cout << C[i];  	}  	return 0; }

 本文作者:小兔子编程 作者首页:小兔子编程-CSDN博客

四、运行结果

1234567887654321 8765432187687654  10000000075341975

五、考点分析

难度级别:中等,这题相对而言在于如何转变思路,具体主要考查如下:

  1. 分析题目,找到解题思路
  2. 充分掌握字符串的使用
  3. 学会如何转变思路,进行加法进位
  4. 学会高精度加法运算的核心
  5. 学会输入流对象cin的使用,从键盘读入相应的数据
  6. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  7. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  8. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  9. 充分掌握变量定义和使用、分支语句、循环语句和高精度算法的应用

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

六、推荐资料

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!