在编程题里有这么一种类型的题目,大数运算,大数有多大呢?特别大,特别大,超过了基本类型的范围,高精度肯定也有四则运算吗,这里主要讲加法,减法乘法除法,后续在讲,喜欢的的记得点个关注哦,这里就介绍高精度加法的解决过程。
人类进行加法运算的时候,会对齐位置,个位对个位,十位对十位,可是计算机输入时,如果长度不一致,是不会对齐的,比如
1111111111
252222
353333
4444444444
这样就不能个位对个位,十位对十位进行相加了,那该怎么办呢?
这个时候,我们就可以把字符串逆序过来啊,对不对。比如像这样
1111111111
222252
3333631111
1111363333
333353
4444444444
7777974444
4444797777
把逆序的加和得到的答案,再逆序,不就是正确答案了?
那么做题的流程就来了!!!!!!
1.首先用两个字符串数组保存大数!
2.然后把字符串逆序输入到整型数组中,方便进行加法!
3.然后按位进行计算,先求和,再进位!
4.最后逆序输出求和进位以后的结果!
上代码:
#include <iostream>
using namespace std;
//首先用两个字符串,保存要进行加法的两个数
string s1,s2;
int a[250],b[250],c[500];
int i,j;
int main(void)
{
cin >> s1 >> s2;
//逆序
for(i = 0 ;i < s1.size();i++)
{
a[s1.size()-i-1] = s1[i] - '0';
}
for(i = 0 ;i < s2.size();i++)
{
b[s2.size()-i-1] = s2[i] - '0';
}
//找到二者较长的那个
int len = s1.size();
if(s2.size()>s1.size())
{
len = s2.size();
}
//开始加
for(i = 0;i< len;i++)
{
c[i] = a[i] + b[i];
}
//进位
for(i = 0;i < len;i++)
{
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
//输出
if(c[len]!=0)
{
len++;
}
for(j = len -1;j >= 0;j--)
{
cout<<c[j];
}
return 0;
}