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

大数相加

发布时间:2020-12-14 03:36:01 所属栏目:大数据 来源:网络整理
导读:大数,是一个long long int都无法表示的数,所以我我们只能用数组做。 首先,输入数组时,我们不能用int型做数组元素,因为无法结束输入,所以只能用char型的,问题又来了,char型的元素运算的是其ASCII码,如何让char型的0-9代表int型的0-9呢? a_num[i]-='
 大数,是一个long long int都无法表示的数,所以我我们只能用数组做。
 首先,输入数组时,我们不能用int型做数组元素,因为无法结束输入,所以只能用char型的,问题又来了,char型的元素运算的是其ASCII码,如何让char型的0-9代表int型的0-9呢?
 a_num[i]-='0';OK!解决。
 相加运算算法:
 定义3个数组,a,b,c,a,b为加数,c为和数。
  循环输入a,b;
  清零c;
  先判断a,b的位数大小,令k等于其最大值;
  循环相加
  让c[k]加a,b的最后一位
  判断是否需要进位;
  输出,c[0]是最高位,判断是否为零,决定输出;
代码如下:
 
 
 
 
 
 
 
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int main()
{
    int a_num[200],b_num[200],c_num[201];
    int i=0,j=0,k,c;
    while((a_num[i]=getchar()) !='n' )
        {a_num[i]-='0';i++;}
    while((b_num[j]=getchar())!='n' )
        {b_num[j]-='0';j++;}
    c=(i>j?i:j);
    i--;j--;//注意,i,j记录的是元素个数,而不是下标,下标从‘0’开始,所以得-1
    memset(c_num,200);
    for(k=c;k>=0;i--,j--,k--)
    {
        if(i>=0)
            {c_num[k]+=a_num[i];}
        if(j>=0)
            {c_num[k]+=b_num[j];}
        if(c_num[k]>9)
            {c_num[k]-=10;c_num[k-1]++;}
    }
    if(c_num[0]!=0)
        cout<<c_num[0];
    for(i=1;i<=c;i++)
        {cout<<c_num[i];}
    return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读