<C语言超大数求和>实现思路及源码

来源:互联网 发布:三菱编程实例100 编辑:程序博客网 时间:2024/05/20 00:13

1.算法思路

将float型或int型先转换成字符串,再去处理相加,所有字符加完后再转回成float或int型。

2.C语言源码如下

/*   *  程序功能:超大数求和 *  编程作者:Story5 * */#include <stdio.h>#include <string.h>#define debugconst int size=1024;int main(int argc,const char *argv[]){    void bigNumAdd(char *a,char *b);    char a[size];    char b[size];    printf("\n\t/*   超大数求和程序  */\n");    printf("\n请输入第一个数,按Enter键结束输入\n");    scanf("%s",a);    printf("\n请输入第二个数,按Enter键结束输入\n");    scanf("%s",b);    printf("\n输入结束,结果为:\n");    bigNumAdd(a,b);    return 0;}void bigNumAdd(char *a,char *b){    void printLine(int n);    char sum[size]="";//求a+b的和,放入sum中    char tmp=0;    int alen=0,blen=0,slen=0;//分别标示a,b,sum字符串的长度    int ia=0,ib=0,is=0;//分别用来遍历a,b,sum    int cflag=0;//判断进位    alen=strlen(a);    blen=strlen(b);    if(alen<blen)//将a,b化为等长字符串,短的前面补字符0    {        memmove(a+blen-alen,a,alen+1);        memset(a,'0',blen-alen);        alen=blen;    }    else if(alen>blen)    {        memmove(b+alen-blen,b,blen+1);        memset(b,'0',alen-blen);        blen=alen;    }#ifdef debug    printf("\n\t  %s\n\t+ %s\n",a,b);    printf("\t  ");    printLine(alen);#endif    for(ia=alen-1,ib=blen-1,is=0;ia>=0&&ib>=0;ia--,ib--,is++)//以最小长度相加    {        if(sum[is]==0)        {            if(a[ia]+b[ib]<='9'+'0')            {                sum[is]=a[ia]+b[ib]-'0';                cflag=0;            }            else            {                sum[is]=a[ia]+b[ib]-'0'-10;                sum[is+1]='1';                cflag=1;            }        }        else        {            if(sum[is]-'0'+a[ia]+b[ib]<='9'+'0')            {                sum[is]=sum[is]-'0'+a[ia]+b[ib]-'0';                cflag=0;            }            else            {                sum[is]=sum[is]-'0'+a[ia]+b[ib]-'0'-10;                sum[is+1]='1';                cflag=1;            }        }    }    slen=strlen(sum);    for(is=0;is<slen/2;is++)//等长部分正序排列    {        tmp=sum[is];        sum[is]=sum[slen-1-is];        sum[slen-1-is]=tmp;    }    printf("\t= %s\n",sum);#ifdef debug    printf("\n\tcflag=%d\n\n",cflag);#endif}void printLine(int n){    int i=0;    for(i=0;i<n;i++)        printf("-");    printf("\n");}
2 0