NewInt 3

来源:互联网 发布:如何更改淘宝店招 编辑:程序博客网 时间:2024/05/16 18:34

减法功能也实现啦,减法就是先对被减数取反,然后当加法算啦^ ^

然后依旧是上代码啦

NewInt.h

#include <iostream>#include <string>class NewInt{private:int *array;int length;public:NewInt();NewInt(const char*s,int len);~NewInt(){/*if (array!=NULL){delete[]array;}*/}void clear(){if (array!=NULL){delete []array;}}void show();void changeToLonger(int len);NewInt operator +(NewInt &ni);NewInt operator -(NewInt &ni);NewInt operator *(NewInt &ni);NewInt operator /(NewInt &ni);void setLength(int len);bool compare(int s1[],int s2[],int len);void quFan();//取反,起名无能表示压力很大};

NewInt.cpp

#include <iostream>using namespace std;#include "NewInt.h"void NewInt::show(){if (array[0]==-1){cout<<"-";}else{}for (int i = 1;i<length;i++){cout<<array[i];}cout<<"  ";}NewInt::NewInt(){array =NULL;length = 0;}NewInt::NewInt(const char* s,int len){array = new int[len+1];if (s[0]=='-'){array[0] = -1;for(int i = 1;i<=len;i++){array[i] = s[i]-'0';}}else {array[0] = 0;for (int i = 1;i<=len;i++){array[i] = s[i-1]-'0';}}length = len+1;}void NewInt::setLength(int len){array = new int[len];length = len;}bool NewInt::compare(int s1[],int s2[],int len){int flag = 0;for (int i = 1;i<len;i++){if (s1[i]-s2[1]<0){flag = 1;}}if (flag ==0){return true;}else{return false;}}void NewInt::changeToLonger(int len){    int *temp = array;if (array[0]==0){array = new int[len];for (int i = len-length+1;i<len;i++){array[i]=temp[i-(len-length)];}for (int j = 1;j<=len-length;j++){array[j] = 0;}array[0]=0;length = len;}else if (array[0]==-1){array = new int[len];array[0]=-1;for (int i = len-length+1;i<len;i++){array[i]=temp[i-(len-length)];}for (int j = 1;j<=len-length;j++){array[j] = 0;}length = len;}}NewInt NewInt::operator +(NewInt &ni){NewInt temp;if (length>=ni.length){ni.changeToLonger(length);temp.setLength(length);}else{changeToLonger(ni.length);temp.setLength(ni.length);}if (array[0]==0&&ni.array[0]==0){for (int i1 = 0;i1<temp.length;i1++){temp.array[i1]=0;}for(int i = temp.length -1;i>=1;i--){if (temp.array[i]+array[i]+ni.array[i]<=9){temp.array[i]+= array[i]+ni.array[i];}else {temp.array[i] += array[i]+ni.array[i]-10;temp.array[i-1]+=1;}}}else if (array[0]==0&&ni.array[0]==-1)//正数加上负数,你妹妹啊{for (int i1 =0;i1<temp.length;i1++){temp.array[i1]=0;}if (compare(array,ni.array,temp.length)){for (int i = temp.length-1;i>=1;i--){if (temp.array[i]+array[i]-ni.array[i]>=0){temp.array[i]+=array[i]-ni.array[i];}else{temp.array[i]+=array[i]-ni.array[i]+10;temp.array[i-1]-=1;}}}else {temp.array[0] = -1;for (int i = temp.length-1;i>=1;i--){if (temp.array[i]-array[i]+ni.array[i]>=0){temp.array[i]+=ni.array[i]-array[i];}else{temp.array[i]+=ni.array[i]-array[i]+10;temp.array[i-1]-=1;}}}}else if (array[0]==-1&&ni.array[0]==0)//负数加正数,好玩吗吗{for (int i1 =0;i1<temp.length;i1++){temp.array[i1]=0;}if (compare(array,ni.array,temp.length)){temp.array[0]=-1;for (int i = temp.length-1;i>=1;i--){if (temp.array[i]+array[i]-ni.array[i]>=0){temp.array[i]+=array[i]-ni.array[i];}else{temp.array[i]+=array[i]-ni.array[i]+10;temp.array[i-1]-=1;}}}else {for (int i = temp.length-1;i>=1;i--){if (temp.array[i]-array[i]+ni.array[i]>=0){temp.array[i]+=ni.array[i]-array[i];}else{temp.array[i]+=ni.array[i]-array[i]+10;temp.array[i-1]-=1;}}}}else {temp.array[0]=-1;for (int i1 =1;i1<temp.length;i1++){temp.array[i1] = 0;}for(int i = length -1;i>=1;i--){if (temp.array[i]+array[i]+ni.array[i]<=9){temp.array[i]+= array[i]+ni.array[i];}else {temp.array[i] += array[i]+ni.array[i]-10;temp.array[i-1]+=1;}}if (temp.array[0]>=0){temp.length++;int *tempArray = temp.array;temp.array = new int[temp.length];for (int i = temp.length;i>0;i--){temp.array[i] = tempArray[i-1];}temp.array[1]+=1;temp.array[0] = -1;}}return temp;}NewInt NewInt::operator -(NewInt &ni){NewInt temp;ni.quFan();temp=*this + ni;return temp;}void NewInt::quFan(){if (array[0]==0){array[0]=-1;}else{array[0]=0;}}

main.cpp

#include "NewInt.h"#include <string>#include <iostream>using namespace std;void main(){char s[]= {'5','9',NULL};char s1[] = {'-','5','5','5',NULL};NewInt new1(s,2);NewInt new2(s1,3);new1.show();new2.show();NewInt new3;new3 = new1-new2;new3.show();new1.clear();new2.clear();new3.clear();}
然后构造方法还是有点问题,main里面每次构造传入的数字是很不人性化的啦,所以试试看能不能把这边优化一下,然后可怕的乘法除法>.<我来了

原创粉丝点击