大数相加
发布时间: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;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |