【面试经典】高精度相加(大整数相加)

    xiaoxiao2025-02-05  46

    在常规计算中我们遇到的数都可以在int范围或者是long int范围内进行计算,但是我们如果遇到比较大的数字,比如说50为数字相加,我们应该怎么办?

    这时候,我们就想想小时候我们在做加法计算的时候,老师教我们利用列竖式的方法进行计算,而这个算法就是回归以前的计算过程。

    #include<iostream> #include<cmath> #include<cstring> using namespace std; char a[1000],b[1000]; int n[1000]={0},u[1000]={0}; int m[1002]={0}; void bigNumberSum(char a[],char b[]){ cin>>a>>b; int index=0; //当a和b都为0的时候,输出为0 if(a[0]=='0'&&b[0]=='0'){ cout<<"0"<<endl; } else{ //先计算a和b的长度 int strlena=strlen(a); int strlenb=strlen(b); //然后将char改为int逆序存入n和u中 for(int i=0,j=strlena-1;i<strlena;i++,j--){ n[i]=a[j]-'0'; } for(int i=0,j=strlenb-1;i<strlenb;i++,j--){ u[i]=b[j]-'0'; } //然后将两个逆序数组进行相加放在m中 int k=strlena>strlenb?strlena:strlenb; for(int i=0;i<k;i++){ m[i]=n[i]+u[i]; if(m[i]>10){ m[i+1]++; m[i]=m[i]; } } //然后找出不为零的边界 for(int j=1001;;j--){ if(m[j]!=0){ index=j; break; } } } for(int j=index;j>=0;j--){ cout<<m[j]; } cout<<endl; } int main(int argc, char const *argv[]) { bigNumberSum(a,b); return 0; }

     

    最新回复(0)