大数加法字符串版本

大数+大数。

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

char * add(char *a ,char *b ,char *c)
{
    int lena = strlen(a);
    int lenb = strlen(b);

    int lenc = 0;

    int righta ,rightb ;
    righta = lena -1 ;
    rightb = lenb - 1;
    int up = 0;
    int x,y,z;
    while(righta >=0 || rightb >=0)
    {
        if(righta < 0) x = 0 ; else x = a[righta--] - '0';
        if(rightb < 0) y = 0 ; else y = b[rightb--] - '0';

        z = x+y + up;

        //处理进位
        if(z >= 10)
        {
            up = z/10;
            z = z%10;
        }
        else up = 0;
        c[lenc++] = z+'0';
    }
    if(up) c[lenc++] = up + '0';
    c[lenc] = 0;
    for(int i=0 ; i<lenc/2 ; i++)
    {
        char t;
        t = c[i];c[i]=c[lenc-i-1];c[lenc-i-1]=t;
    }

    return c;


}


int main()
{
    FILE *pInput;
    pInput = fopen("input.txt","r");

    char a[110],b[110],c[110];
    while(fscanf(pInput,"%s%s",a,b) == 2)
    {
        printf("%s\n",add(a,b,c));
    }

    fclose(pInput);
    return 0;
}

需要在同目录下新建输入文件,文件名为input.txt,可以有多行,每行两个数字,空格隔开,例如

input。txt:

123456 654321
7451 258


直接执行,结果会在屏幕上输出,如果需要输出到文件,则可以做如下修改:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

char * add(char *a ,char *b ,char *c)
{
    int lena = strlen(a);
    int lenb = strlen(b);

    int lenc = 0;

    int righta ,rightb ;
    righta = lena -1 ;
    rightb = lenb - 1;
    int up = 0;
    int x,y,z;
    while(righta >=0 || rightb >=0)
    {
        if(righta < 0) x = 0 ; else x = a[righta--] - '0';
        if(rightb < 0) y = 0 ; else y = b[rightb--] - '0';

        z = x+y + up;

        //处理进位
        if(z >= 10)
        {
            up = z/10;
            z = z%10;
        }
        else up = 0;
        c[lenc++] = z+'0';
    }
    if(up) c[lenc++] = up + '0';
    c[lenc] = 0;
    for(int i=0 ; i<lenc/2 ; i++)
    {
        char t;
        t = c[i];c[i]=c[lenc-i-1];c[lenc-i-1]=t;
    }

    return c;


}


<pre name="code" class="cpp">int main()
{
    FILE *pInput,*pOut;
    pInput = fopen("in.txt","r");
    pOut = fopen("out.txt","w");
    char a[110],b[110],c[110];
    while(fscanf(pInput,"%s%s",a,b) == 2)
    {
        fprintf(pOut,"%s\n",add(a,b,c));
    }

    fclose(pInput);
    fclose(pOut);
    return 0;
}

 

标准输入输出的,可以直接对main函数修改,将文件相关的都去掉:

int main()
{
    char a[110],b[110],c[110];
    while(scanf("%s%s",a,b) == 2)
    {
        printf("%s\n",add(a,b,c));
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值