NewInt 4

来源:互联网 发布:sqlserver 视图 union 编辑:程序博客网 时间:2024/05/16 11:32

发现了一个很严峻的问题,加法中有问题,所以又上传了一个版本,然后这个版本还实现了乘法,^ ^

然后就是感觉我的代码好凌乱啊,可维护性,可读性都超级弱爆了>.<董花花你还要继续加油啊。

然后上代码= =、

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);void addToLast(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;}}void NewInt::quFan(){if (array[0]==0){array[0]=-1;}else{array[0]=0;}}void NewInt::addToLast(int len){int *temp = array;array = new int[length+len];for (int i = length;i<length+len;i++){array[i]=0;}for (int j = 0;j<length;j++){array[j] = temp[j];}length = len+length;}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;}}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[0] = 0;}}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;}NewInt NewInt::operator *( NewInt &ni){//先初始化temp使得temp与this相同长度,但是均为0NewInt temp;temp.setLength(length);for (int i =0;i<temp.length;i++){temp.array[i]=0;}if ((array[0]==0&&ni.array[0]==0)||(array[0]==-1&&ni.array[0]==-1))//正数乘以正数{for (int i = 1;i<ni.length;i++){int j = ni.array[i];NewInt middleValue1 ;middleValue1.setLength(length);for (int z = 0;z<length;z++){middleValue1.array[z] = array[z];}NewInt middleValue2 ;middleValue2.setLength(length);for (int z1 = 0;z1<length;z1++){middleValue2.array[z1] = 0;}while (j!=0){middleValue2=middleValue2+middleValue1;j--;}middleValue2.addToLast(ni.length-i-1);temp =temp+middleValue2;}temp.array[0]=0;}else if ((array[0]==0&&ni.array[0]==-1)||(array[0]==-1&&ni.array[0]==0)){for (int i = 1;i<ni.length;i++){int j = ni.array[i];NewInt middleValue1 ;middleValue1.setLength(length);for (int z = 0;z<length;z++){middleValue1.array[z] = array[z];}NewInt middleValue2 ;middleValue2.setLength(length);for (int z1 = 0;z1<length;z1++){middleValue2.array[z1] = 0;}while (j!=0){middleValue2=middleValue2+middleValue1;j--;}middleValue2.addToLast(ni.length-i-1);temp =temp+middleValue2;}temp.array[0]=-1;}return temp;}

main.cpp

#include "NewInt.h"#include <cstring>#include <iostream>using namespace std;void main(){char s[]= {'-','5',NULL};char s1[] = {'-','5','5',NULL};NewInt new1(s,strlen(s)-1);NewInt new2(s1,strlen(s1)-1);new1.show();new2.show();NewInt new3;new3 = new1*new2;new3.show();new1.clear();new2.clear();new3.clear();}

然后就是代码的质量实在是太差了,然后感觉计算效率也很低= =、

原创粉丝点击