找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3499|回复: 0
收起左侧

C++实现两个N位数相加的程序

[复制链接]
ID:102668 发表于 2016-1-10 23:23 | 显示全部楼层 |阅读模式
本帖最后由 51hei社区 于 2016-1-10 23:25 编辑
  1. #include<iostream>
  2. #include<string>
  3. int main()
  4. {  
  5. using namespace std;
  6. string a,b;
  7. cout<<endl<<"输入数字A:";
  8. cin>>a;
  9. cout<<"输入数字B:";
  10. cin>>b;
  11. int dh/*用来保存A B中每位数相加的和*/
  12.   ,yu=0/*用来保存要进位的值*/
  13.   ,az=a.size()-1,bz=b.size()-1;/*测量A B字符串的长度 减1是因为数组从0的开始的*/
  14. int bjab=az>bz?az:bz;//计算出a b两个字符串那个长
  15.    
  16.   char  *p=new char[bjab+3]; //申请空间,用来存放最后的和
  17.             
  18. if(p==NULL)
  19. {
  20.   cout<<"内存空间不够 ";
  21.   return 0;
  22. }
  23.     int i=0,vc=0,k=0,jl=0;
  24. for(i;i<=bjab+2;i++)
  25. {

  26.   if(!(a[az]>='0'&&a[az]<='9'&&b[bz]>='0'&&b[bz]<='9'))
  27.   {
  28.    cout<<endl<<"你输入的数字中有非法字符! 程序将退出"<<endl;
  29.       delete []p;
  30.    exit(1);

  31.   }
  32.   dh=(a[az]-'0')+(b[bz]-'0');   //将a b中的每一位字符转换成数字后相加
  33.         p[vc++]=((dh+yu)%10)+'0';     //保存 dh中和个位数
  34.      if(dh+yu==10) yu=1;           //用来除去如果dh等于9 yu等于1时没余数的情况
  35.   else yu=dh/10;           

  36.    
  37.   if(az==0) a[az]='0';        //当a 字符串比b短时,比b短的地方补0
  38.         else   az--;            
  39.   if(bz==0) b[bz]='0';         //同上
  40.   else     bz--;
  41. }
  42.      cout<<endl<<"数字A的长度为:"
  43.    <<a.size()<<endl<<"数字B的长度为:"
  44.    <<b.size()<<endl;
  45. cout<<endl<<"A+B=";
  46. if(p[vc-1]=='0'&&p[vc-2]=='0')  k=vc-3;  //除去没有进位时前面有0的情况
  47. else if(p[vc-1]='0') k=vc-2;
  48. else
  49. k=vc-1 ;
  50.     for(k;k>=0;k--)                          //从后面往前输出字符
  51.       cout<<p[k];
  52.     cout<<endl;
  53.       delete []p;   
  54. return 0;
  55. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表