减法功能也实现啦,减法就是先对被减数取反,然后当加法算啦^ ^
然后依旧是上代码啦
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里面每次构造传入的数字是很不人性化的啦,所以试试看能不能把这边优化一下,然后可怕的乘法除法>.<我来了