大数 加法,乘法,减法(c++类实现)
来源:互联网 发布:山狗运动相机 知乎 编辑:程序博客网 时间:2024/04/29 07:12
闲来无事,练练c++!(有待完善,还少除法)
#include <iostream>#include <string>#include <cstring>#include <cstdlib>#include <cmath>using namespace std;const int INF=1e4;class BignNum{public://--------------------构造函数BignNum(){ memset(num,0,sizeof(num)); len=1; }BignNum(int number){ *this=number; }BignNum(char *number){ *this=number; }//-------------------重载 "=" 运算符BignNum operator =(const char *number){len=strlen(number);for(int i=0;i<len;i++)num[i]=number[len-1-i]-'0';return *this;}BignNum operator =(int number){char temp[INF];sprintf(temp,"%d",number);*this=temp;return *this;}string str() const; //将计算结果转换成字符串BignNum operator + (const BignNum& x)const; //加法运算BignNum operator - (const BignNum& x)const; //减法运算BignNum operator * (const BignNum& x)const; //乘法运算private:int len; //要计算的数据的长度int num[INF]; //保存要计算的数据};string BignNum::str()const{string res="";for(int i=0;i<len;i++)res=char(num[i]+'0')+res;if(res == "") res="0";else //除去前导0{int i;for(i=0;i<len-1;i++)if(res[i]!='0') break; res=res.substr(i,len-i);}return res;}BignNum BignNum::operator - (const BignNum& x)const{BignNum temp;temp.len=0;for(int i=0,g=0;i<len;i++){if(i>=x.len){temp.num[temp.len++]=num[i]-g;g=0;continue;}if(num[i]-g<x.num[i]){temp.num[temp.len++]=num[i]+10-x.num[i]-g;g=1;}else {temp.num[temp.len++]=num[i]-x.num[i]-g;g=0;}}return temp;}BignNum BignNum::operator + (const BignNum& x)const{BignNum temp;temp.len=0;for(int i=0,g=0;g||i<max(len,x.len);i++){int b=g;if(i<len) b+=num[i];if(i<x.len) b+=x.num[i];temp.num[temp.len++]=b%10;g=b/10;}return temp;}BignNum BignNum::operator * (const BignNum& x)const{BignNum temp;temp.len=len+x.len-1;for(int i=0;i<len ;i++){int g(0);for(int j=0;j<x.len;j++){temp.num[i+j]+=num[i]*x.num[j]+g;if(j!=x.len-1){g=temp.num[i+j]/10;temp.num[i+j]=temp.num[i+j]%10;}}}if(temp.num[temp.len-1]>9){int number=temp.num[temp.len-1]/10;temp.num[temp.len-1]=temp.num[temp.len-1]%10;temp.num[temp.len]=number;temp.len++;}return temp;}//----------重载 "<<" ">>" 运算符istream& operator >> (istream& in,BignNum& x){string s;in>>s;x=s.c_str();return in;}ostream& operator << (ostream& out,BignNum& x){out<<x.str()<<endl;return out;}int swap(char *str1,char *str2) //比较相减的两个字符串的大小{int len1=strlen(str1);int len2=strlen(str2);if(len1<len2)return -1;else if(len1 == len2){if(strcmp(str1,str2)==0) return 0;if(strcmp(str1,str2)<0)return -1;}return 1;}int main(){int ncase;cin>>ncase;while(ncase--){char str1[500],str2[500];scanf("%s%s",str1,str2);int flag=swap(str1,str2);if(flag==0) cout<<"0"<<endl;else if(flag==-1){BignNum Instance1(str2),Instance2(str1),temp;temp=Instance1-Instance2;cout<<"Instance1-Instance2=-"<<temp<<endl;}else{BignNum Instance1(str1),Instance2(str2),temp;temp=Instance1-Instance2;cout<<"Instance1-Instance2="<<temp<<endl;}char str3[500],str4[500]; BignNum Instance3,Instance4,temp1; cin>>Instance3>>Instance4; temp1=Instance3+Instance4; cout<<"Instance3+Instance4="<<temp1<<endl; temp1=Instance3*Instance4; cout<<"Instance3*Instance4="<<temp1<<endl; }return 0;}
- 大数 加法,乘法,减法(c++类实现)
- 使用C++类实现大数加法,大数减法,大数乘法
- 大数减法、加法、乘法
- 大数加法、减法、乘法
- 大数加法、减法、乘法、除法实现
- 大数加法.减法.乘法.除法
- 大数加法,减法,乘法总结
- 大数的加法,减法,乘法
- 大数加法、减法和乘法
- 大数加法、大数乘法、大数减法。Swift。
- 大数乘法,大数加法,大数减法
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- 大数运算——加法,减法,乘法
- 大数运算——加法,减法,乘法
- 大数运算——加法,减法,乘法 .
- 大数加法 减法 乘法 除法 高精度四则运算
- 大数加法 减法 乘法 除法 高精度四则运算
- 大数乘法、大数加法实现
- java表格的使用 单元格绘制二
- Android 跳转到动态壁纸列表界面
- Open source & GPL
- VC6生成的串口执行程序如何在其它电脑上运行
- ExtJS 开发调试工具大全
- 大数 加法,乘法,减法(c++类实现)
- C#Winform主窗体Load事件中对菜单权限进行控制
- JAVA中String与StringBuffer的区别
- Struts功能详解——ActionMapping对象
- ExtJS 可视化开发工具大全
- 常用二极管符号大全
- xml
- Struts功能详解——Action
- ActionBar神奇魅力1