加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数相加问题

发布时间:2020-12-14 03:34:11 所属栏目:大数据 来源:网络整理
导读:?大数相加:超越数据类型范围的也可以进行相加 ? ?分析: 用一维数组解决? ?1.数据元素的输入 用getchar无限输入字符 ,从下标0开始 保存元素 保存顺序是高位在前,低位在后,输入123 ?保存a1[0]=1....这里也要把字符转换为整形,关系 整数1+'0' ='1'? ?? ?


?大数相加:超越数据类型范围的也可以进行相加
?
?分析: 用一维数组解决?
?1.数据元素的输入 用getchar无限输入字符 ,从下标0开始 保存元素 保存顺序是高位在前,低位在后,输入123
?保存a1[0]=1....这里也要把字符转换为整形,关系 整数1+'0' ='1'?
??
? ?2.一但遇到进位问题,上面这种就会溢出,数据无法完全保存,所有 把上面的存储顺序改成是 低位在前,高位在后
?如输入123 a[0]=3,a[1]=2?
?
?3.相加操作 :把每一位进行相加 这里用已存在的数字对相加结果进行保存,输入的数可能长度不一,所有数组长度要
?取最输入最长的
?
?4.相加进位问题:因是每一位相加,结果可能会大于9,大于9的就要进行进位操作,其它的不变
?

?5.显示输出结果问题:可能会出现少位数或多位数的,这里就用一变量ncount解决?



#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

int main()
{
    int a1[100];
    int b1[100];
    int a[100]={0};
    int b[100]={0};
    int na,nb;       //保存数组元素的长度 
    int ncount = 0;    //相加后的数组共有多少个元素 
    
    int i,j;
    i = 0;
    j = 0;
    
    
    ////////////////////输入数据////////////////////////////// 
    cout<<"请输入加数:";
    while ( (a1[i]=getchar()) !='n' )   //下标小的保存高位 
    { 
          a1[i] = a1[i]-'0';
          i++;
    }
    
    ///////转换存储顺序 
    na = i;    //保存数组中存入了多少个有效元素 na-1个
	int k=0;
    for (k=0,i=na-1; i>=0; i--)  // //下标小的保存低位 
    {
        a[i] = a1[k];
        k++;
    }
        

    cout<<"输入被加数:";
    while ( (b1[j]=getchar()) !='n' )
    {
          b1[j] = b1[j]-'0';
          j++;
    }
    
    nb = j;    //保存数组中存入了多少个有效元素 nb-1个
    
    ///////转换存储顺序 
	//int k=0;
    for (k=0,j=nb-1; j>=0; j--)  // //下标小的保存低位 
    {
        b[j] = b1[k];
        k++;
    }
    
    
    ////////////////////////// 取得保存相加结果数组的长度////////////////
    /* 如输入123+23 我们就要取大数字的位数作为 保存结果数组的小标 不这样就会丢失数据 
    */ 
    
    int lengh ; //取数组元素最长的作为保存相加后的结果
    if (na>=nb)
    {
        lengh = na;
    } 
    else
    {
        lengh = nb;
    }
    
    
    ////////////////////////// 开始执行加法操作////////////////
    for (int m=0; m<lengh; m++)
    {
        a[m] = a[m] + b[m];   //两数进行相加  每一位相加 
    } 
    
    ///////////////////////////进位处理 ///////////////////////////////
    /*如 98+7 就要进位 
    数据保存如下:
       a[0]=8,a[0]=9;  b[0]=7  执行上面的相加操作  结果为: 
       a[0]=a[0]+b[0]=15,a[1]=a[1]+b[1] = 9+0=9
       
       下面为进位处理  lengh =2
       a[0]=15   a[1]=9
       1. n=0 a[0]>9 需进位
         temp=15/10=1   a[1]=a[1]+temp =9+1=10   a[0]=15%10=5
         
       2.n=1 a[1]=10>9 continue
         temp = 10/10=1  a[2]=0+1=1   a[1]=10%10=0
       
       3.n=2  等于lengh 所有退出 
       这时相加的结果为:a[0]=5  a[1]=0    a[2]=1  
       输出就是105 
    */
    for (int n=0; n<lengh; n++)  //进位处理 
    {
      if (a[n] >9)
      {
          int temp = a[n]/10;
          a[n+1] = a[n+1] + temp;
          a[n]   = a[n]%10;
          ncount = lengh;      //进位的话 数组要多一位数字 
      }
      else
      {
          ncount = lengh-1;    //不进位保存结果的数组长度就是 输入数字大的位数长 
          continue;     //不进位就往下走 
      } 
    }
    

    //////////////////////输出结果/////////////////////////////// 
    
    
    cout<<"相加结果是:";
    for ( i=ncount; i>=0; i--)  //ncout 解决了显示输出结果问题:可能会出现少位数或多位数 
    {
        cout<<a[i];
    }
    cout<<endl; 
    system("pause");
    return 0;
}
by ? 吴尚奇 ? 2014/06 ?Devil_box

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读