本帖最后由 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;
- }
復制代碼
|