首页
社区
课程
招聘
[求助]C语言如何实现两个大整数相加?
发表于: 2008-10-29 19:43 6260

[求助]C语言如何实现两个大整数相加?

2008-10-29 19:43
6260
比如123456789+123456789
我写了一下,不过很多BUG,比如遇到些特殊情况就处理不了。还请大家帮帮忙~
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
        static int flag=0;
        char n1[100];
        char n2[100];
        char temp[100];
        printf("请输入第一个数字");
        gets(n1);
        printf("请输入第二个数字");
        gets(n2);
        int i,j,n1_L,n2_L,endLen;
        n1_L=strlen(n1);
        n2_L=strlen(n2);
        if(n1_L>n2_L)
        {
                strcpy(temp,n1);
                strcpy(n1,n2);
                strcpy(n2,temp);
        }
        for(i=n1_L-1,j=n2_L-1,endLen=n2_L;i>=0,j>=0,endLen>=0;i--,j--,endLen--)
                {
                        int n1_x=(int)(n1[i]-48);
                        if(n1_x<0)break;
                        int n2_y=(int)(n2[j]-48);
                        if(n1_x+n2_y+flag>10)
                        {
                                n2[j]=(n1_x+n2_y+flag)%10;
                            flag=1;
                        }
                        else
                        {
                                n2[j]=(char)(n1_x+n2_y+flag+48);
                                flag=0;
                        }
                }
                printf("相加后得到的数字%s\n",n2);       
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
用字符串模拟手算十进制整数,是一种容易理解的方法,编码也相对清晰易懂。

但是从效率的角度,通常不采用这种方法。

前几天研究RSA时,学习了下afanty的实现方法,是个比较高效的方法。

e00K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6u0r3j5X3u0K6K9s2c8E0L8q4)9J5c8X3u0T1M7K6g2Q4x3V1k6H3k6h3c8A6P5e0f1H3y4U0j5@1i4K6u0W2K9s2c8E0

对于用字符串表示的十进制数加法,如果用汇编语言写算法会更高些。

INTEL指令系统中有ASC码加法的相关指令,可以很方便实现十进制的加法的。
2008-10-29 20:31
0
游客
登录 | 注册 方可回帖
返回