⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 大数加法.c

📁 大数加法、减法、乘法和除法的C语言实现源码
💻 C
字号:
/*--------------------------------------------------------------------------
*函数名称: 大数加法
*函数过程:1 比较两个数那一个长
* 2 以长的作为循环次数
* 3 对应项相加 进位存贮直到下高位相加用
* 4 直到循环结束
* 5 !!!!!!没设计负数相加
*入口参数:numa,numb,result字符串
*出口参数:无
*编辑环境:winSP2 + VC2003 + C++
*--------------------------------------------------------------------------*/
void addition(char *numa, char *numb,char *result) // 计算两大数之和
{
  char *pna = findend(numa); // 指向numa的一个指针。point numa pna 指向乘数的最低位,
  char *pnb = findend(numb); //指向numb的一个指针 //pnb 指向被乘数的最低位,
  int along=(int)strlen(numa); //标记数字a的长度;
  int blong=(int)strlen(numb); //标记数字b的长度;
  int times = 0; // 标致要计算多少次。
  int carry=0,temp_result; //存贮进位 和临时结果的
  Node *head, // 用于存贮头指针
    *pstart, // 用于存贮计算时的首指针
    *pnew; //作于申请新结点 
  head = pstart =new Node; //初始化首结点和头结点。
  pstart -> data = 0;
  pstart -> next = NULL;
  pstart -> ahead = NULL; 

  if (abigerb(numa ,numb)>=1)
  times = (int)strlen(numa); //比较两个字符串长度,以大的作为循环次数
  else
    {
      times = (int)strlen(numb);
      pna = findend(numb); //交换指针
      pnb = findend(numa);
    along=(int)strlen(numb); //标记数字a的长度;
    blong=(int)strlen(numa); //标记数字b的长度;
    }
    while ((times-- && (times>=0))|| carry != 0)
    { 
      if(!pstart->next) //如果当前为空结点,则申请新结点
      {
        pnew = new Node;
        pnew -> data = 0;
        pnew -> next = NULL;
        pnew -> ahead = pstart;
        pstart -> next = pnew;
      }
      else temp_result =(pstart->data +(*pna-48)+(*pnb-48)+carry) ; //自身的值+新值+进位 作为当前的新值

      pstart -> data = temp_result%10; //存贮个位
      carry = temp_result/10; //存贮进位
      pstart = pstart -> next; //结点移动
    blong--;
      if(blong>0)pnb--; //指针移向被加数高位
      else *pnb=48; //之后相减就变为了0不作任何运算;
      pna--; //加数指针移动,
    }
  pstart =head; //寻找链表的结尾点
  while(pstart->next != 0)
  {
  pstart->data += 48; //!!<<<因为我们的输出是字符。所以再此加上48>>>> 逆顺输出
  pstart = pstart->next ;
  }

  int tip = 0; //转为字符串用
    pstart = pstart->ahead ; //找有效字
     //cout<<"\n结果是 : ";
    while(pstart != 0) //输出正序的结果;
    {
    result[tip++] = pstart->data; 
     //cout< data;
    pstart = pstart->ahead ;
    }
    result[tip] = '\0';

  pstart =head; //释放空间
  while(pstart->next != 0)
  {
  pnew = pstart->next ;delete pstart;
  pstart =pnew; 
  }
  return ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -