1002 ( A + B Problem II )

本文介绍了一个使用 C++ 实现的字符串加法程序,该程序能够处理任意长度的大整数相加,并通过案例演示了如何输入两个字符串形式的大整数、进行逐位相加并处理进位的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>

#include<string>

#define max 1000

using namespace std;

int min(int a,int b)

{

 if(a>b)return b;

 else return a;

}

int main()

{

 char a[max],b[max];

 int Ia[max],Ib[max],n,i,j,k,lena,lenb,z;

 cin>>n;

 for(i=0;i<n;i++)

 {

  k=0;

  z=0;

  cin>>a>>b;

  lena=strlen(a);

  lenb=strlen(b);

  cout<<"Case "<<i+1<<":"<<endl;

  for(j=0;j<lena;j++)cout<<a[j];

  cout<<" ";

  for(j=0;j<lena;j++)Ia[j]=a[lena-j-1]-48;//转换为整型数组 例如:input: 1234 转换为:4321这样就从个位数开始相加

  cout<<"+"<<" ";

  for(j=0;j<lenb;j++)cout<<b[j];

  cout<<" ";

  for(j=0;j<lenb;j++)Ib[j]=b[lenb-j-1]-48;

  cout<<"="<<" ";

  for(j=0;j<min(lena,lenb);j++)

   if(Ia[j]+Ib[j]+k>=10)//k为是否进位的标记

   {

    Ia[j]=(Ia[j]+Ib[j]+k)-10;

    k=1;

   }

   else

   {

    Ia[j]=Ia[j]+Ib[j]+k;

    k=0;

   }

  if(lena==min(lena,lenb)&&lena!=lenb)//Ib还有数,而Ia中已经没有数,此时只要再处理Ib中剩余的元素

  {

   for(j=lena;j<lenb;j++)

    if(Ib[j]+k>=10)

    {

     Ib[j]=Ib[j]+k-10;

     k=1;

    }

    else

    {

     Ib[j]=Ib[j]+k;

     k=0;

    }

    if(k==1)cout<<k;//做完了Ib中剩余的元素,K还是为1,则说明还有进位直接输出

    while(lenb-z-1>=lena)//将Ib中刚刚处理的剩余元素反向输出

    {

     cout<<Ib[lenb-z-1];

     z++;

    }

  }

       if(lenb==min(lena,lenb)&&lena!=lenb)

  {

   for(j=lenb;j<lena;j++)

    if(Ia[j]+k>=10)

    {

     Ia[j]=Ia[j]+k-10;

     k=1;

    }

    else

    {

     Ia[j]=Ia[j]+k;

     k=0;

    }

    if(k==1)cout<<k;

  }

  if(k==1&&lena==lenb)cout<<k;

    

  for(j=lena-1;j>=0;j--)

  {

   cout<<Ia[j];

   if(j==0&&i<n-1){cout<<endl;cout<<endl;}

  }

  if(i==n-1)cout<<endl;

 }

 return 0;

}

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值