这个大数相加程序用了哪些算法在逻辑结构上定义了哪些算法并求流程图

#include
#include
#include

#define max(a,b) (a)>(b)?(a):(b)

int big_add(char*,char*,char*);
int big_compare(char*,char*,int*);
int is_number_string(char*);

int main()
{
char num1[80],num2[80],num3[100];

puts("First number:");
gets(num1);
puts("Second number:");
gets(num2);
if(big_add(num1,num2,num3))
{
    puts("Sum:");
    puts(num3);

}
else
    puts("Input error!");

return 0 ;

}

int big_add(char num1,char *num2, char *sum)
{
if(is_number_string(num1)&&is_number_string(num2))
{
int len1=strlen(num1),len2=strlen(num2),c=0;
int len=max(len1,len2)+1;
char *res=(char
)malloc((len+1)*sizeof(char));

    memset(res,0x30,len*sizeof(char));
    res[len]=0;

    for(;len>0;len1--,len2--)
    {
        len--;

        len1>0&&(res[len]+=num1[len1-1]-0x30);
        len2>0&&(res[len]+=num2[len2-1]-0x30);
        res[len]+=c;

        if(res[len]>0x39)
        {
            res[len]-=0xa;
            c=1;
        }
        else
            c=0;
    }

    res[len]+=c;

    while(!(*res-0x30))
        res++;

    strcpy(sum,res);

    return(1);
}
return(0);

}

int big_compare(char *num1,char *num2,int *result)
{
if(is_number_string(num1)&&is_number_string(num2))
{
int len1=strlen(num1),len2=strlen(num2);

    if(len1==len2)
    {
        while(*num1++==*num2++);

        *result=*num1-*num2;
    }
    else
        *result=len1-len2;

    return(1);
}
else
    return(0);

}

int is_number_string(char *str)
{
for(;*str;str++)
if(*str<'0'||*str>'9')
return(0);

return(1);

}

c/c++大数相加原理就是把数当成字符串,然后做运算时,一个字符一个字符的取出,转成数值。进行运算。最后再把结果一个一个的存入到另一个字符串中去。

无非就是作为字符串,然后按照人笔算的流程去计算

big_add
这是加法
for(;len>0;len1--,len2--)
从字符串的后面往前运算,类似我们笔算,从低位到高位算
if(res[len]>0x39)
这里是进位,0x39就是ascii的'9'

big_compare
比较

is_number_string
判断输入的是不是全部都是数字

再不会,去买一本小学数学书,原理、流程上面都有。