• 大数加法之C语言函数法(只有正数版)


         由于某些原因,我于今天2017-4-19将我的博文搬到博客园了,以后我就在这里扎根了。

     

          之前想过在博客写文章方便日后复习,但一直未能实现,所以,现在这篇是我个人人生中第一篇博客,所以写博客完全没经验,可能会有些啰嗦,读者将就着看吧,哈哈。由于本人还是学生,所以有理解不对的地方,请各位大神指出,让我,让后面看到此文章的人共同进步,谢谢,本文适合新手看,个人觉得思路挺清晰,大神可飘过,勿喷。

         大数加法,可以模拟小学的加法,主要是几步:由字符型转换成整形数组,反转相加,处理进位情况,再转换回字符型输出答案。废话不多说了,代码如下:

       

     

    # include<stdio.h>
    # include<string.h>
    char * sum(char *a,char*b)//对C语言来说返回一个字符指针,因为我们的结果是以字符串形式输出
    {
        int s[1000]= {0};//用整形数组存储数字,记得清零
        char c[1000];//这将是我们用来输出的数组,后面直接返回数组名 c即可
        int i,j,maxlen,d;
        int la=strlen(a),lb=strlen(b);
        la>lb?maxlen=la:maxlen=lb;//这里是要找出两个数字的最高位
        for(j=la-1; j>=0; j--)//将字符转换成数字并反转存进整形数组
            s[la-1-j]+=a[j]-'0';
        for(j=lb-1; j>=0; j--)//同上 
            s[lb-1-j]+=b[j]-'0';
        for(i=0,d=0; i<maxlen; i++)//d是进位的数,十进制一般都是1了。
        {
            s[i]+=d;//从低位开始
            d=s[i]/10;//如果两数相加超过十 d就会变1
            s[i]%=10;//然后此时s[i]存的就是该位上的数字
        }
        if(d>0)//处理最高位
            s[maxlen++]+=d;
        for(i=maxlen-1; i>=0; i--)//再将整形数组 反转转换为字符数组
            c[maxlen-1-i]=s[i]+'0';
        c[maxlen]='';//最后面加上结束符
        return c;//返回字符指针
    }
    int main(void)
    {
        char a[1000],b[1000];
        char *c;
        while(scanf("%s %s",a,b))
        {
            c=sum(a,b);
            printf("%s
    ",c);
        }
        return 0;
    }

    以上就是鄙人之见
    测试效果如下:

  • 相关阅读:
    翻译一下libtiff的手册
    LIBTIFF读写黑白TIFF
    LIBTIFF存储代码,存图、拼图
    几点TIFF的说明
    TIFF Tag TileWidth
    TIFF Tag Orientation
    OpenCV 加速图像处理
    Qt QString 、String、char* 三者之间相互转换
    PackBits解压缩算法
    关于LZW算法的压缩与解压缩
  • 原文地址:https://www.cnblogs.com/yellowgg/p/6735244.html
Copyright © 2020-2023  润新知