求两个大数的和

zxcvzxcvzxcvzxcvzxcv 2006-12-03 12:32:46
求两个很大的数的和,已经超过计算机能表示的范围,考虑正负,求高手指点
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2006-12-04
  • 打赏
  • 举报
回复
用字符串或者数组
v2002750 2006-12-04
  • 打赏
  • 举报
回复
我用链表做过,比较傻,一个节点里面放一位。
sankt 2006-12-04
  • 打赏
  • 举报
回复
数组或者链表存储数据
superxiaomm 2006-12-04
  • 打赏
  • 举报
回复
大数问题,可以参考那些做rsa的文章,他们有大数类的
greenteanet 2006-12-03
  • 打赏
  • 举报
回复
给你一个大数相乘算法
#include <iostream>
#include <string>


using namespace std;

class slong
{
public:
slong()
{
_str = "";
}

slong(string str)
{
string::iterator itor = str.begin();
for(; itor != str.end(); ++itor)
{
if(*itor < '0' || *itor > '9')
throw "the parameter is error.";
}
_str = str;
}

slong(char* s)
{
if(s == NULL)
{
_str = "";
return;
}

size_t size = strlen(s);
for(size_t i = 0; i < size; ++i)
{
if(s[i] < '0' || s[i] > '9')
throw "the parameter is error.";
}

_str = s;


}

slong(const slong& sl)
{
_str = sl._str;
}

slong& operator =(const slong& sl)
{
if(&sl == this)
return *this;
_str = sl._str;
return *this;
}

slong operator *(slong& sl)
{
if(sl._str.length() == 0)
return *this;

int n = static_cast<int>(sl._str.length());
int m = static_cast<int>(this->_str.length());

int t = m + n - 1; // caculate times

string::reverse_iterator itor1, itor2;
int j = 0;
int k = 0;

int c = 0;
int r = 0;
int v = 0;

char s[2];

string rproduct;
for(int i = 0; i < t; ++i)
{
v = 0;
j = 0;

itor1 = _str.rbegin();

for(; itor1 != _str.rend(); ++itor1)
{
k = 0;
itor2 = sl._str.rbegin();
for(; itor2 != sl._str.rend(); ++itor2)
{
if(j + k == i)
{
v += ctoi(*itor1) * ctoi(*itor2);
break;
}
k++;
}
j++;
if(j > i)
break;
}

v += c;
r = v%10;
c = v/10;

itoa(r, s, 10);
rproduct += s;
}

if(c != 0)
{
itoa(c, s, 10);
rproduct += s;
}

string temp;
temp.resize(rproduct.length());
string::reverse_iterator ritor = rproduct.rbegin();
string::iterator itor = temp.begin();
for(; itor != temp.end(); ++itor)
{
*itor = *ritor;
ritor++;
}

slong product(temp);
return product;
}

int ctoi(char c)
{
return c - 48;
}

string value()
{
return _str;
}

private:
string _str;
};

int main( )
{
string s1, s2;
cout << "please input first operator" << endl;
cin >> s1;
cout << "please input second operator" << endl;
cin >> s2;

slong sl1(s1);
slong sl2(s2);

slong sl3 = sl1 * sl2;
cout << "the value is :" << endl;
cout << sl3.value() << endl;

char word;
while(cin >> word)
if(word == 'q')
break;

return 0;
}
sandrowjw 2006-12-03
  • 打赏
  • 举报
回复
老问题了,可以search一把看看。
msccao 2006-12-03
  • 打赏
  • 举报
回复
UP

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧