阅读量:0
目录
C++高精度加法运算
一、题目要求
1、编程实现
用高精度算法实现两个数:m和n,m和n的位数在1到100之间
2、输入输出
输入描述:第一行m,第二行输入n,且m和n的位数在1到100之间
输出描述:只有一行,m和n相加的和
输入样例:
1234567887654321 8765432187687654
输出样例:
10000000075341975
二、算法分析
- 高精度加法算法的基本思想是将大整数按位进行计算,从低位到高位逐个相加,同时需要考虑进位的情况。
- 由于位数已经超出常规数据类型,所以需要将相加的数据以字符串的形式读入
- 将字符串翻转存入整型数组中,两数之和的位数最大为较大数的位数加 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 8765432187687654 10000000075341975
五、考点分析
难度级别:中等,这题相对而言在于如何转变思路,具体主要考查如下:
- 分析题目,找到解题思路
- 充分掌握字符串的使用
- 学会如何转变思路,进行加法进位
- 学会高精度加法运算的核心
- 学会输入流对象cin的使用,从键盘读入相应的数据
- 学会for循环的使用,在确定循环次数的时候推荐使用学会
- 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
- 充分掌握变量定义和使用、分支语句、循环语句和高精度算法的应用
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!