本文最后更新于 534 天前,其中的信息可能已经有所发展或是发生改变。
A+Bproblem
int的大小是有限的,long long也会遇到限制,那高精度的加法就成了必须要了解的知识。
考虑两个数做加法,就是两个数字的同一位相加,然后再进位。因此将两个很大的整数,用数组一位一位的存储,手动的模拟加法,便是hp
直接上代码
#include<iostream>
#include<cstring>
using namespace std;
void hp(char*a,char*b,char*c)
{
int arr1[2000]={0};
int arr2[2000]={0};
int arr3[2001]={0};
int i,s=0;
int len1,len2,len;
len1=strlen(a);
len2=strlen(b);
len=len1>len2?len1:len2; //判断相加后的可能位数
len++;
for(i=0;i<len1;i++) //将第一个数转成数组
arr1[i]=*(a+len1-i-1)-'0';
for(i=0;i<len2;i++) //将第二个数转成数组
arr2[i]=*(b+len2-i-1)-'0';
for(i=0;i<len;i++) //逐位相加,暂时不考虑进位
arr3[i]=arr1[i]+arr2[i];
for(i=0;i<len;i++) //进位
{
arr3[i]+=s;
s=arr3[i]/10;
arr3[i]=arr3[i]%10;
}
len=1;
for(i=2000;i>=0;i--) //判断相加后的位数
{
if(arr3[i]!=0)
break;
}
if(i==-1)
i++;
len=i+1;
*(c+len)='\0';
for(i=len-1;i>=0;i--) //将结果转为字符串存储
{
*(c+len-i-1)=arr3[i]+'0';
}
}
int main()
{
char a[1000]={'\0'};
char b[1000]={'\0'};
char c[1000]={'\0'};
cin>>a>>b;
hp(a,b,c);
cout<<c;
}
先这样,后面有东西再补充或者开新文章