高精度模拟——加法
分析要求:普通的long long是不能满足的;
要实现高精度加法的运算,那么我们需要用字符串输入两个数,然后通过整型数组进行储存每一位数,然后通过模拟竖式运算得到准确结果。
废话不多说,样例代码如下;
#include<bits/stdc++.h>
using namespace std;
int a[100000];//储存字符串转化后的每一位数
int b[100000];
char c[100000];
char d[100000];
int main()
{
int i=0,j=0,m=0,n=0;
while(cin>>c>>d)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
m=strlen(c);//c字符串的长度,即位数的位数
n=strlen(d);
for(i=m;i>=1;i--)//转化
a[i]=c[m-i]-'0';
for(i=n;i>=1;i--)
b[i]=d[n-i]-'0';
for(i=1;i<=m||i<=n;i++)//模拟竖式加法且i的范围位1到max(a,b)
{
a[i+1]+=(a[i]+b[i])/10;//考虑进位
a[i]=(a[i]+b[i])%10;//第i位数的值
}
int biaoji=1;//作为标记是否全为0的情况
for(j=max(m,n)+1;j>=1;j--)//排除为0的情况
{
if(a[j]!=0)
{
biaoji=0;//不能满足全为0,修改,退出
break;
}
}
if(biaoji)//没有修改,说明全为0,只需要输出一个0就可以了;
{
cout<<"0";
}
else//正常输出
{
for(j;j>=1;j--)
cout<<a[j];
}
cout<<endl;
}
}