C++完成一个大数类的+、-和输入、输出

来源:互联网 发布:linux history 记录数 编辑:程序博客网 时间:2024/06/05 22:39

编写一个程序完成大数类的加减和输入输出,作为C++入门,编写这样的程序还是花费了一定的时间。先来说明一下本程序的编程思路:

编程思路:

输入的数字用字符串存储,然后再将这个字符串转换到int型数组中,数组中的一个单元存储4位数字,也即范围是0~9999.。这样就将一个大数分割成以4位为一组,一组为数组中的一个单元。大数之间的+、-、输入输出,其实就是这样特殊的数组之间特殊的运算。本题主要的难点在于运算符重载。

#include<iostream>#include<string>#include<cstring>#include<iomanip> #include<algorithm> using namespace std;typedef unsigned int unint;const int dlen=4;//写一个大数类,能处理整数的+、-和赋值和输入输出。class Bnumber{unint m;int a[100];public:Bnumber(){m=1;for(int x=0;x<100;x++){a[x]=0;};}unint getm(){return m;}Bnumber(const char* st){int t,k,index,len,v;len=strlen(st);m=len/dlen;v=len%dlen;index=0;if(v)m++;for(int i=len-1;i>=0;i-=dlen){t=0;k=i-dlen+1;if(k<0)k=0;for(int j=k;j<=i;j++){t=t*10+st[j]-'0';}a[index++]=t;}for(int x=index;x<100;x++){a[x]=0;}}friend ostream& operator<<(ostream& out,const Bnumber& b){if(b.m>1){cout<<b.a[b.m-1];for(unint i=b.m-2;i>0;i--){out<<setw(4)<<setfill('0')<<b.a[i];}}out<<setw(4)<<setfill('0')<<b.a[0]<<endl;return out;}Bnumber operator+(const Bnumber& b)const{unint t;Bnumber c(*this);if(b.m>m){t=m;for(unint i=0;i<t;i++){c.a[i]+=b.a[i];if(c.a[i]>=10000){c.a[i]-=10000;c.a[++i]+=1;}}for(unint j=t;j<b.m;j++)c.a[j]=b.a[j];c.m=b.m;}else{t=b.m;for(unint i=0;i<t;i++){c.a[i]+=b.a[i];if(c.a[i]>=10000){c.a[i]-=10000;c.a[++i]+=1;}}for(unint j=t;j<m;j++)c.a[j]=a[j];c.m=m;}return c;}friend Bnumber operator-(const Bnumber& a,const Bnumber& b){Bnumber c(a);unint t=a.m>b.m?a.m:b.m;for(int i=0;i<t;i++){c.a[i]-=b.a[i];}if(c.a[t-1]>0){for(unint j=0;j<t-1;j++){if(c.a[j]<0){c.a[j]+=10000;--c.a[j+1];}}}if(c.a[t-1]<=0){for(unint j=0;j<t-1;j++){if(c.a[j]>0){c.a[j]=10000-c.a[j];c.a[j+1]++;}if(c.a[j]<0){c.a[j]=-c.a[j];}}}while(c.a[t-1]==0){t--;c.a[t-1]=-c.a[t-1];}c.m=t;return c;}Bnumber& operator=(char* st){Bnumber a(st);*this=a;return *this;}friend istream& operator>>(istream& in,Bnumber& a){int i;char st[100];cout<<"请输入:";in>>st;a=st;return in;}};int main(){Bnumber b("123456789");Bnumber c("123006008");Bnumber a;Bnumber d=b;cout<<b<<endl;cout<<d;cout<<c<<endl;cout<<b+c<<endl;cout<<c-b<<endl;cin>>a;cout<<a<<endl;return 0;}


1 0
原创粉丝点击