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
- C++完成一个大数类的+、-和输入、输出
- C的输入和输出
- C 的输入和输出
- Linux-C基础知识学习:C语言作业-用for循环完成:输入10个数,求它们的和并输出
- 小结:C语言的输入和输出
- c程序的输入和输出
- C语言的输入和输出函数
- C语言实验:输入任意一个年份和月份,输出该月份的公历日历
- C语言实验:输入任意一个年份和月份,输出该月份的公历日历
- 输入一个大数将其转化为二进制输出
- C++:输入一个数n; 输出的是一个有*和#构成的n*n的正方形; 一圈套一圈~~~~
- c语言 输入两个浮点数,输出它们中的大数
- C语言输入一个数,打印其输出的次数
- C程序设计----输入和输出
- C语言输入和输出
- 【C】文件输入和输出!!!
- c语言和c++的输入,输出和异常
- 编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。
- jquery easyui DataGrid 数据表格 属性
- 160. Intersection of Two Linked Lists
- 文字检测和识别5-LSTM简介
- 基于FPGA的PCIE总线实现PC与SDRAM的数据读写过程
- Spring mvc实现上传文件进度条
- C++完成一个大数类的+、-和输入、输出
- Mysql 索引
- 十分钟让你明白Objective-C的语法(和Java、C++的对比)
- 引入sleak异常,Warning: Device is not tracking resource allocation处理
- 自定义的RPC的Java实现
- iOS单例写法
- Core Animation - 视觉效果<二>
- iphone真机调试 Xcode Could ont lauch "XXX" process launch failed:security
- 移动端Web App自适应布局探索与总结