C语言大数运算-加法篇

C语言大数运算-加法篇前言 本篇博客将分为 4 到 5 篇来和大家一块讨论大数的加减乘除 然后再将运算做成一个大数运算库 其中除法较为棘手 但如果作完前三个运算后就没有什么难度了 虽然大多主流的编程语言如 java c 都有大数运算库 可是 c 语言标准库并没有提供的大数运算 网上的 c 语言大数运算大多散而不周或过于复杂 所以本人决定写博客做一些简单的介绍 由于本人水平有限 如有错误或者 bug 请大家批评指正我会第一时间更正 开发

for(i=lensum-1;i>0;i--){  if(result[i]>9){ result[i]=result[i]%10; result[i-1] += 1; } }

注意实际的程序,会把9+4的结果存在result[0]中,8+3的结果存在result[1]中,上面的图是为了简化方便理解,其实也可以像图中那样存把循环控制的i由递增改成递减就可以了。

1 //#include"big.h" 2 //将整个加法写成一个方法,然后在main函数中调用。 3 #include 
    4 #include 
    5 #include 
    6 char * bigadd(char *adda,int lena,char *addb,int lenb){ //加法运算的方法。 7 int num='0',i,k,j,tmp; 8 for(i=0;i 
  
    //将字符编码的数字转换为对应的数, 
   9 adda[i]=adda[i]-num; 
   //例如6实际在字符串中存储的是54, 
   10 } 
   //减去0对应的48得到真实的6存储在字符数组中。 
   11 
   for(i= 
   0;i 
   
     12 addb[i]=addb[i]-num; 
    13 } 
    14 
    int lensum; 
    //求出结果数组的长度。 
    15 lensum = lena>lenb?lena:lenb; 
    16 lensum++; 
    17 
    char *result,final[BUFSIZ]; 
    //result用于返回结果集,final数组用于整理结果集。 
    18 result=( 
    char*) 
    calloc(lensum, 
    1); 
    19 
    for(i= 
    0,j= 
    0;i 
    
      //循环的给每一位作加法 
     20 result[i]=adda[lena-i- 
     1]+addb[lenb-i- 
     1]; 
     21 } 
     22 
     if(lena>lenb){ 
     //使用判断将较大数的高位也写入结果数组 
     23 
     for(i=lenb;i 
     
       24 result[i]=adda[lena-i- 
      1]; 
      25 } 
      26 } 
      27 
      if(lenb>lena){ 
      28 
      for(i=lena;i 
      
        29 result[i]=addb[lenb-i- 
       1]; 
       30 } 
       31 } 
       32 
       for(k= 
       0;k 
       
         1;k++){ 
        //整理结果数组的每一位,满10进一。 
        33 
        if(result[k]> 
        9){ 
        34 tmp=result[k]/ 
        10; 
        35 result[k]=result[k]% 
        10; 
        36 result[k+ 
        1] += tmp; 
        37 } 
        38 } 
        39 j= 
        0; 
        40 
        if(result[lensum- 
        1]!= 
        0){ 
        //去掉前前导0将结果处理后写到final数组中。 
        41 final[j]=result[lensum- 
        1]+ 
        '0'; j++; 
        43 } 
        44 
        for(i=lensum- 
        2;i>= 
        0;i--){ 
        45 final[j++]=result[i]+ 
        '0'; 
        46 } 
        47 result=final; 
        //再把result指针指向final数组中,并返回result指针。  
        48 
        return result; 
        49 } 
        50 
        int main(){ 
        //利用main测试方法,用puts打印结果。  
        51 
        int lena,lenb; 
        52 
        char *result,sa[BUFSIZ],sb[BUFSIZ]; 
        53 
        scanf( 
        "%s",sa); 
        54 
        scanf( 
        "%s",sb); 
        55 lena= 
        strlen(sa); 
        56 lenb= 
        strlen(sb); 
        57 result=bigadd(sa,lena,sb,lenb); 
        58 
        puts(result); 
        59 
        60 } 
        
       
      
     
    
  

下篇介绍大数减法。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206982.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午3:03
下一篇 2026年3月19日 下午3:03


相关推荐

  • 盘点当下大热的 7 大 Github 机器学习『创新』项目

    盘点当下大热的 7 大 Github 机器学习『创新』项目本文将会分享近期发布的七大GitHub机器学习项目。这些项目广泛覆盖了机器学习的各个领域,包括自然语言处理(NLP)、计算机视觉、大数据等。最顶尖的Github机器学习项…

    2022年6月7日
    37
  • 【Java 代码实例 14】BeanUtils用法详解,附源码分析

    【Java 代码实例 14】BeanUtils用法详解,附源码分析目录一、org.apache.commons.beanutils.BeanUtils简介二、使用的前置条件三、添加pom四、代码实例1、为属性赋值2、拷贝对象,为对象赋值3、map转bean4、bean转map五、Apache的BeanUtils与Spring的BeanUtils一、org.apache.commons.beanutils.BeanUtils简介BeanUtils是ApacheCommons组件的成员之一,主要用于简化JavaBean封装数据的操作。​简化反射封装参数的步骤,给对象封

    2025年10月28日
    5
  • Android入门第八篇之GridView(九宫图)

    Android入门第八篇之GridView(九宫图)

    2021年11月29日
    40
  • Git 指令集

    Git 指令集Git指令集Git是分散式的版本控制系統,從架設、簡易操作、設定,此篇主要是整理基本操作、遠端操作等.註:Git的範圍太廣了,把這篇當作是初學入門就好了.注意事項由project/.git/config可知:(若有更多,亦可由此得知)origin(remote)是Repository的版本master(branch)是

    2022年5月30日
    35
  • docker镜像操作_docker 运行镜像

    docker镜像操作_docker 运行镜像前言Docker的三大核心概念:镜像、容器、仓库。初学者对镜像和容器往往分不清楚,学过面向对象的应该知道类和实例,这跟面向对象里面的概念很相似我们可以把镜像看作类,把容器看作类实例化后的对象。|

    2022年7月31日
    6
  • matlab求解延迟微分方程_状态依赖时滞微分方程的动力学研究

    matlab求解延迟微分方程_状态依赖时滞微分方程的动力学研究固定时滞的微分方程:满足下面的形式,也就是微分方程右边包含时滞部分,且时滞为常数。使用dde23函数求解:问题:       (1)微分方程定义:多了一个时滞部分创建myddefun.m文件,文件里的内容如下:functiondy=myddefun(t,y,Z)dy=[Z(1,1);Z(1,1)+Z(2,2);

    2022年10月1日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号