永发信息网

求教一道C++作业题,各位才子们快来看看

答案:1  悬赏:70  手机版
解决时间 2021-04-24 18:22

题目:

设计一个CBigInteger类,它可以保存超过32位,64位的数,例如你可以把1024个数字的数存在这样的一个类中。这个类的构造函数可以接受文件输入,即可以从一个文件中读入一个很长的数。假设文件中的数按10进制格式存储,格式为: 12345678901234567909………. ;且一个文件中只存一个数。数中间可以有空格、逗号,文件结束意味着数结束。再假设我们只关心正整数。 除去上面的之外,设计的CBigInteger类应该支持operator+运算,即必须完成:

CBigInteger operator+( CBiginteger& AnotherBigInteger)类似的成员函数。

测试上面的类,使用两个保存数的文本文件(文件自己建立),其中一个中 间有512个数字,另一个中间有256个数字。 程序要能够把两个数的和打印出来。

希望大虾们尽快写出来

最佳答案

根据您的要求写出如下代码:


头文件


#include <iostream>
#include <string>
using namespace std;


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>


class CBigInteger
{
public:
CBigInteger();
CBigInteger(const char* data);
virtual ~CBigInteger();
char* GetData(char* ret);
void Show();
void Set(const char* data);
int GetSize();


CBigInteger operator+(const CBigInteger& data);
CBigInteger operator=(const CBigInteger& data);
private:
char data[MAX_DATA_NUM];
};



源文件:


CBigInteger::CBigInteger()
{
memset(data, 0, MAX_DATA_NUM);
}


CBigInteger::~CBigInteger()
{


}


CBigInteger::CBigInteger(const char* data)
{
memcpy(this->data, data, MAX_DATA_NUM);
}


void CBigInteger::Show()
{
cout<<data<<endl;
}


void CBigInteger::Set(const char* data)
{
memset(this->data, 0, MAX_DATA_NUM);
memcpy(this->data, data, strlen(data));
}


int CBigInteger::GetSize()
{
return strlen(data);
}


CBigInteger CBigInteger::operator+(const CBigInteger& data)
{
int start = clock();
int i;
CBigInteger tempbig = data;

int maxsize = GetSize()>tempbig.GetSize()?GetSize():tempbig.GetSize();
int minsize = GetSize()<tempbig.GetSize()?GetSize():tempbig.GetSize();
int retsize = maxsize + 1;


char* maxchars = new char[maxsize];
char* minchars = new char[minsize];
if(GetSize() > tempbig.GetSize())
{
memcpy(maxchars, this->data, maxsize);
memcpy(minchars, tempbig.data, minsize);
}
else
{
memcpy(minchars, this->data, minsize);
memcpy(maxchars, tempbig.data, maxsize);
}


int* maxdatas = new int[maxsize];
int* mindatas = new int[minsize];
int* retdatas = new int[retsize];


for(i=0; i<maxsize; i++)
{
maxdatas[i] = maxchars[i]-'0';
retdatas[i+1] = maxchars[i]-'0';
}


retdatas[0] = 0;
for(i=0; i<minsize; i++)
{
mindatas[i] = minchars[i]-'0';
}
for(i=0; i<minsize; i++)
{
retdatas[i+retsize-minsize] = maxdatas[i+maxsize-minsize] + mindatas[i];
}
for(i=retsize-1; i>=1; i--)
{
if(10 <= retdatas[i])
{
retdatas[i-1]+=retdatas[i]/10;
retdatas[i] = retdatas[i]%10;
}
}


char* retchars = new char[retsize+1];
memset(retchars, 0, retsize+1);
if(0 != retdatas[0])
{
for(i=0; i<retsize; i++)
{
retchars[i] = retdatas[i]+'0';
}
}
else
{
for(i=1; i<retsize; i++)
{
retchars[i-1] = retdatas[i]+'0';
}
}


memcpy(this->data, retchars, retsize+1);
delete[] maxdatas;
delete[] mindatas;
delete[] retdatas;


delete[] maxchars;
delete[] minchars;
delete[] retchars;


return *this;
}


CBigInteger CBigInteger::operator=(const CBigInteger& data)
{
memcpy(this->data, data.data, MAX_DATA_NUM);
return *this;
}
char* CBigInteger::GetData(char* ret)
{
if(strlen(ret) > MAX_DATA_NUM)
return NULL;
for(int i=0; i<strlen(ret); i++)
{
ret[i] = data[i];
}
return ret;
}



主函数:


void main()
{
FILE* fp1 = fopen("file1.txt", "r");
FILE* fp2 = fopen("file2.txt", "r");
if(!fp1 || !fp2)
{
cout<<"Open file faild!\n";
return;
}
char data1[MAX_DATA_NUM] = {0};
char data2[MAX_DATA_NUM] = {0};
fgets(data1, MAX_DATA_NUM, fp1);
fgets(data2, MAX_DATA_NUM, fp2);


printf("data1: %s\n\n\n", data1);
printf("data2: %s\n\n\n", data2);

CBigInteger big(data1);
CBigInteger big2(data2);
CBigInteger big3;


start = clock();
big3 = big+big2;
end = clock();
cout<<"The result of "<<data1<<"+"<<data2<<" is: ";
big3.Show();


fclose(fp1);
fclose(fp2);
printf"Use time %f\n",(double)(end-start)/CLOCKS_PER_SEC/1000);
}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问还有什么象《守护甜心》《SA特优生》《星
三国志10和三国志8哪个好玩
《活佛济公》白雪的饰演者
剪刀手代表什么?
比较忧伤的歌曲,推荐几首。不要长篇大论,留
91年的霜降是那天啊
情侣空间怎么解除邀请,如何解除情侣空间 怎么
金庸小说两大女一号比谁聪明!
求应用文范文
名门发型在什么地方啊,我要过去处理事情
请问谁有word2003的安装程序
情感悲伤的句子
求AU 5.7 全套F包工具
三度防水是什么意思?
路飞最后和 蛇女发展的怎么样了呢
推荐资讯
微雅商贸在什么地方啊,我要过去处理事情
男女朋友之间有没有真正的友谊
什么男人最懂女人心?
茶道与人生语句,世界经济界名人经典语录
看过夏至未至的进。你有遇到过这样の朲么。
银行卡转不进钱
诺基亚 N85还会不会降价?
诺基亚97最新报价
有哪位在南京信息职业技术学院啊?
有什么好方法可以祛雀斑?
跑跑卡丁车sr时代还能持续多久?
生活又是什么?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?