第一次手写高精度,调了1w遍

 

string 和 char数组是真的让人头疼。感觉用好这俩玩意必须狂补计算机导论。一开始我有点rz,非要把每一位计算结果存在字符串里,出了10w个bug——包括但不限于乱码、string类型变量的读写、string类型函数返回空串、指针无故消失

 

我这样的rz只配用int数组储存每一位计算结果。(u1s1,正解应该是这样,而不是存在字符串里= =)

 

喵的。

 

(p.s.别忘了考虑由于进位,计算结果的长度可能是max(len1,len2)+1)

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[5005],b[5005];
int num1[5005],num2[5005];
int ans[5005];
int main()
{
    cin>>a>>b;
    int temp=0;
    int len1=strlen(a),len2=strlen(b);
    for(int i=0;i<len1;i++) num1[len1-1-i]=a[i]-'0';
    for(int i=0;i<len2;i++) num2[len2-1-i]=b[i]-'0';
    if(len1<len2)
    {
        swap(num1,num2);
        swap(len1,len2);
    }
    for(int i=len2;i<len1;i++)
        num2[i]=0;
    if(num1[0]+num2[0]>=10)
    {
        temp=1;
        ans[0]=num1[0]+num2[0]-10;
    }
    else if(num1[0]+num2[0]<10)
        ans[0]=num1[0]+num2[0];
    for(int i=1;i<len1;i++)
    {
        if(num1[i]+num2[i]+temp>=10)
        {
            ans[i]=num1[i]+num2[i]+temp-10;
            temp=1;
        }
        else if(num1[i]+num2[i]+temp<10)
        {
            ans[i]=num1[i]+num2[i]+temp;
            temp=0;
        }
    }
    int ll=len1;
    if(temp==1) {ans[len1]=1;ll=len1+1;}
    for(int i=ll-1;i>=0;i--) cout<<ans[i];
    return 0;
}
憨憨版
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int padd(char s1[],char s2[],int ans[])
{
    int temp=0,ll;
    int num1[5005],num2[5005];
    int len1=strlen(s1),len2=strlen(s2);
    for(int i=0;i<len1;i++) num1[len1-1-i]=s1[i]-'0';
    for(int i=0;i<len2;i++) num2[len2-1-i]=s2[i]-'0';
    if(len1<len2)
    {
        swap(num1,num2);
        swap(len1,len2);
    }
    for(int i=len2;i<len1;i++)
        num2[i]=0;
    if(num1[0]+num2[0]>=10)
    {
        temp=1;
        ans[0]=num1[0]+num2[0]-10;
    }
    else if(num1[0]+num2[0]<10)
        ans[0]=num1[0]+num2[0];
    for(int i=1;i<len1;i++)
    {
        if(num1[i]+num2[i]+temp>=10)
        {
            ans[i]=num1[i]+num2[i]+temp-10;
            temp=1;
        }
        else if(num1[i]+num2[i]+temp<10)
        {
            ans[i]=num1[i]+num2[i]+temp;
            temp=0;
        }
    }
    ll=len1;
    if(temp==1) {ans[len1]=1;ll=len1+1;}
    return ll;
}
int main()
{
    char a[5005],b[5005];
    int ans[5005];
    int ll;
    cin>>a>>b;
    ll=padd(a,b,ans);
    for(int i=ll-1;i>=0;i--) cout<<ans[i];
    return 0;
}
自定义函数版