您的位置:首页 > 其它

大数相加

2015-11-01 19:14 302 查看
大数相加思想:

用数组储存数字,统一长度,然后同位相加,大于9则进位,取余,判断最高位是否有进位情况

代码如下

#include <stdio.h>

#include <string.h>

char s1[10000];

char s2[10000];

int ss1[10000];

int ss2[10000];

int ss3[10000];

int main()

{

    //数组清零

    memset(s1,0,sizeof(s1));

    memset(s2,0,sizeof(s2));

    memset(ss3,0,sizeof(ss3));

    //输入数字

    scanf("%s",s1);

    scanf("%s",s2);

    //测量长度

    int l1,l2;

    l1=strlen(s1);

    l2=strlen(s2);

    //数组由char形转换为int形,同时将数组存储位置反转

    for(int i=0;i<l1;i++)

        ss1[i]=s1[l1-1-i]-'0';

    for(int i=0;i<l2;i++)

        ss2[i]=s2[l2-1-i]-'0';

    //统一长度

    if(l1<l2)

        l1=l2;

    //计算数值

    for(int i=0;i<l1;i++)

    {

        //同位相加,不要忘了加ss3[i],因为可能有进位,防止漏加

        ss3[i]=ss1[i]+ss2[i]+ss3[i];

        //进位

        if(ss3[i]>9)

        {

            ss3[i+1]=ss3[i]/10;

            ss3[i]%=10;

        }

    }

    //输出

    //判断是否最高位有进位

    if(ss3[l1]!=0)

        printf("%d",ss3[l1]);

    for(int i=l1-1;i>=0;i--)

        printf("%d",ss3[i]);

    printf("\n");

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: