现在的位置: 首页 > 综合 > 正文

计算机N位数相加

2013年08月05日 ⁄ 综合 ⁄ 共 1150字 ⁄ 字号 评论关闭

#include<iostream>
#include<string>
int main()
{  
 using namespace std;
 string a,b;
 cout<<endl<<"输入数字A:";
 cin>>a;
 cout<<"输入数字B:";
 cin>>b;
 int dh/*用来保存A B中每位数相加的和*/
  ,yu=0/*用来保存要进位的值*/
  ,az=a.size()-1,bz=b.size()-1;/*测量A B字符串的长度 减1是因为数组从0的开始的*/
 int bjab=az>bz?az:bz;//计算出a b两个字符串那个长
    
  char  *p=new char[bjab+3]; //申请空间,用来存放最后的和
            
 if(p==NULL)
 {
  cout<<"内存空间不够 ";
  return 0;
 }
    int i=0,vc=0,k=0,jl=0;
 for(i;i<=bjab+2;i++)
 {
 
  if(!(a[az]>='0'&&a[az]<='9'&&b[bz]>='0'&&b[bz]<='9'))
  {
   cout<<endl<<"你输入的数字中有非法字符! 程序将退出"<<endl;
      delete []p;
   exit(1);
 
  }
  dh=(a[az]-'0')+(b[bz]-'0');   //将a b中的每一位字符转换成数字后相加
        p[vc++]=((dh+yu)%10)+'0';     //保存 dh中和个位数
     if(dh+yu==10) yu=1;           //用来除去如果dh等于9 yu等于1时没余数的情况
  else yu=dh/10;           

   
  if(az==0) a[az]='0';        //当a 字符串比b短时,比b短的地方补0
        else   az--;             
  if(bz==0) b[bz]='0';         //同上
  else     bz--;
 }
     cout<<endl<<"数字A的长度为:"
   <<a.size()<<endl<<"数字B的长度为:"
   <<b.size()<<endl;
 cout<<endl<<"A+B=";
 if(p[vc-1]=='0'&&p[vc-2]=='0')  k=vc-3;  //除去没有进位时前面有0的情况
 else if(p[vc-1]='0') k=vc-2;
 else
 k=vc-1 ;
    for(k;k>=0;k--)                          //从后面往前输出字符
      cout<<p[k];
    cout<<endl;
      delete []p;    
 return 0;
}

 

 

抱歉!评论已关闭.