0
点赞
收藏
分享

微信扫一扫

大数相加(c++)算法

墨春 2022-03-15 阅读 78

有没有想过100位数加100数的数字该如何计算出结果吗?一般计算机是无法直接计算那么大的数字,这个时候我们得模拟我们手算加法的进制过程,如何用代码把它实现,这样子就能实现大数相加了,首先我很感谢汤健同学给我分享的这串代码,我写笔记的初衷是为了不断提高自己的能力,希望能与更多小伙伴一起分享有趣的算法。

下面提供代码

实例1:

实例2:

实例3:

输入两个数字,然后输出结果,代码如下:

#include<iostream>
#include<cstring> 
#include<algorithm>
using namespace std;
//主要思路:将两个数字存储入a数组和b数组中,然后从a和b的低位(相同位数)分别相加,判断是否进位 
//as,bs通过a[i]-'0'操作实现得到每个 个十百千位上的整数 
 //l为在 i-- 和j--过程中,是比较长的那一位,用于判断是否遍历到最高位的数字 (这个条件l==0) 
//k的值为0或者1,开始默认为0,比如说,上一次循环中as+bs+k>9,k就变为1,若当遍历到下一次时,
//判断情况(3种)
//(1): as+bs+k<9,k就为0,不进位,
//(2):as+bs+k>9,k就为1,进位 
//(3):as+bs+k>9,同时这个是最大位时,e++下一位直接进1,结束 
//仔细观察可以发现这三种情况结束后都有e++;当遍历到最高位时,无论是否进位,结束都有e++
//因此,结尾在输出结果时倒序输出,从e-1开始,因为前面提到了e++; 
int main()
{
string a,b;
 int i,j,s=0,k=0,e=0,l,c[9999];
 int as,bs;
 cin>>a;//输入a,b两个数相加 
 cin>>b;
 for(i=a.size()-1,j=b.size()-1;i>=0||j>=0;j--,i--)
 {
  l=max(i,j);//选取i和j中的最大长度 
  if(i>=0)
{
 as=a[i]-'0';
 }
 
 else
 {
  as=0;
 }
 if(j>=0)
 {
 bs=b[j]-'0';
 }
 else
 {
  bs=0;
 }
 if(as+bs+k>9&&l==0)// 
 {
  c[e]=as+bs+k-10;
  e++;
  c[e]=1;
  e++;
  
 
 }
 else if(as+bs+k>9)
 {
  c[e]=as+bs+k-10;
  k=1;
  e++;
 }
 else if(as+bs+k<=9)
 {
  c[e]=as+bs+k;
  k=0;
  e++;
 }
 }

 for(i=e-1;i>=0;i--)
 {
  cout<<c[i];
 }
 cout<<endl;
 
 return 0;
 }

 很感谢读者的观看,喜欢我的文章请点赞+关注+收藏

 

 

举报

相关推荐

0 条评论