【高精类】High_running V0.01
时间:2010-08-22 来源:abcdabcd987
彷徨了两年,终于又回来了cnblogs。因为作为一个喜欢技术的人,把文章放在QQ空间现在容易被扁,又不想破费去买个虚拟主机,想来想去还是cnblogs好,皮也多,人也多,高手更多!加上我关注的除了嵌入式这边没有专门的分类外,其他的分类都很详细,所以以后就定居cnblogs。不知道等到我高中毕业这里会有多少篇随笔。
High_running这个类(名字随便起的,英文不好)主要实现高精度运算,基本任务就是整数加减乘除模,后面再加上浮点数的,再后面优化算法。其实做这个类的主要目的还是熟悉C++,毕竟我总不能拿着这个类去参加NOIP吧?
因为今天时间有限,仓促地编了这么一个开始,只支持+=操作,而且还没处理数组长度问题,还有异常处理等小问题。因为try...catch还没仔细看,所以等看完了再补上去,毕竟主要是为了学习。
高手请无视~!或者给我提提意见更好!

#ifndef _HIGH_RUNNING_H
#define _HIGH_RUNNING_H
#include <iostream>
class High_running
{
public:
High_running():Data(NULL){}
High_running(const size_t);
High_running(const std::string, const size_t);
High_running& operator+=(const High_running&);
private:
typedef signed int high;
int MaxLength;
int Length;
high* Data;
void _init();
friend std::istream& operator>>(std::istream&, High_running&);
friend std::ostream& operator<<(std::ostream&, const High_running&);
};
#endif

#include <iostream>
#include <string>
#include "High_running.h"
std::istream& operator>>(std::istream& in,High_running& obj)
{
std::string str;
in>>str;
obj.Length=str.size();
obj._init();
for (size_t i=0;i!=str.size();++i)
obj.Data[i]=str[obj.Length-i-1]-48;
return in;
}
std::ostream& operator<<(std::ostream& out,const High_running& obj)
{
for (int i=0;i!=obj.Length;++i)
out<<(int)obj.Data[obj.Length-i-1];
return out;
}
void High_running::_init()
{
if (Data==NULL)
{
Data=new high[MaxLength];
memset(Data,0,sizeof(Data));
}
}
High_running::High_running(const size_t max)
:Length(0),MaxLength(max),Data(NULL)
{
_init();
}
High_running::High_running(const std::string str, const size_t max=0)
:Length(str.size()),MaxLength(max<=str.size()?str.size():max),Data(NULL)
{
_init();
for (size_t i=0;i!=str.size();++i)
Data[i]=str[Length-i-1]-48;
}
High_running& High_running::operator+=(const High_running& obj)
{
size_t end = Length < obj.Length ? obj.Length : Length;
int x = 0;
for (size_t i=0;i!=end;++i)
{
x = Data[i] + obj.Data[i] + x / 10;
Data[i] = x % 10;
}
x /= 10;
if (x > 0)
{
Data[Length]=x;
++Length;
}
return *this;
}
#include <iostream>
#include "High_running.h"
using namespace std;
int main()
{
High_running a(256),b(256);
cin>>a>>b;
a+=b;
cout<<a;
system("pause");
return 0;
}
相关阅读 更多 +