本帖最后由 51hei社区 于 2016-1-10 23:25 编辑
- #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;
- }
复制代码
|