马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目次
C++高精度加法运算
一、标题要求
1、编程实现
2、输入输出
二、算法分析
三、步伐编写
四、运行结果
五、考点分析
六、推荐资料
C++高精度加法运算
一、标题要求
1、编程实现
用高精度算法实现两个数:m和n,m和n的位数在1到100之间
2、输入输出
输入描述:第一行m,第二行输入n,且m和n的位数在1到100之间
输出描述:只有一行,m和n相加的和
输入样例:
- 1234567887654321
- 8765432187687654
复制代码 输出样例:
二、算法分析
- 高精度加法算法的根本思想是将大整数按位进行盘算,从低位到高位逐个相加,同时需要思量进位的情况。
- 由于位数已经超出通例数据类型,所以需要将相加的数据以字符串的情势读入
- 将字符串翻转存入整型数组中,两数之和的位数最大为较大数的位数加 1
- 从低位到高位依次两两相加后,再加上上一位的进位,将和模 10 作为本位结果,将和除以 10作为下一位的进位
- 重复步骤 4,直到所有位数处置惩罚完,
- 从后往前找结果数组中第一个非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
- 876543218768765410000000075341975
复制代码 五、考点分析
难度级别:中等,这题相对而言在于怎样转变思路,详细主要观察如下:
- 分析标题,找到解题思路
- 充分掌握字符串的利用
- 学会怎样转变思路,进行加法进位
- 学会高精度加法运算的核心
- 学会输入流对象cin的利用,从键盘读入相应的数据
- 学会for循环的利用,在确定循环次数的时间推荐利用学会
- 掌握输出流对象cout的利用,与流插入运算符 << 联合利用将对象输出到终端表现
- 学会分析标题,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
- 充分掌握变量定义和利用、分支语句、循环语句和高精度算法的应用
PS:方式方法有多种,小朋友们只要可以或许到达标题要求即可!
六、推荐资料
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |