问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++编程(返回任意大的两整数之和)

发布网友 发布时间:2023-05-24 14:49

我来回答

3个回答

热心网友 时间:2023-10-12 10:25

我有个大整数阶乘的程序。其中有个BigInt类,有一个Add方法可以参考。
缺一个把输入的字串每4位截开,初试化大整数的程序,但是已经很容易了。你看看吧。

bigint.h
---------------------
#pragma once

#define LMAX 10000

struct _Node
{
int Value;
struct _Node *pNext;
struct _Node *pPrev;
};

typedef struct _Node Node, *PNode;

class CBigInt
{
PNode pHead;
PNode pTail;
int iSize;
public:
CBigInt(int n);

public:
~CBigInt(void);
void Multply(int iNumber);
void MultplyBig(CBigInt);

void CalcF(int n);
char* ToString();
void setValue(int l);

void ClearList();
void AppendNode(int l);
};

------------------------
bigint.cpp
------------------------
#include "StdAfx.h"
#include "BigInt.h"

CBigInt::CBigInt(int n)
{
this->iSize = 0;
this->pHead = NULL;
this->setValue(n);
}

CBigInt::~CBigInt(void)
{
this->ClearList();
}

void CBigInt::setValue(int l)
{
this->ClearList();
this->AppendNode(l);
}

void CBigInt::AppendNode(int l)
{
PNode pNewNode = new Node();
pNewNode->Value = l;
// 如果是个空链,那么挂到第一链上。否则正常挂在最后一链
if (this->pTail == NULL)
{
pNewNode->pPrev = NULL;
pNewNode->pNext = NULL;
this->pHead = pNewNode;
this->pTail = pNewNode;
}
else
{
pNewNode->pNext = NULL;
pNewNode->pPrev = this->pTail;
this->pTail->pNext = pNewNode;
this->pTail = pNewNode;
}
this->iSize ++;
}

void CBigInt::ClearList()
{
PNode p = this->pHead;
PNode pTmp;
while(p != NULL)
{
pTmp = p->pNext;
delete p;
p = pTmp;
}
this->pHead = NULL;
this->pTail = NULL;
this->iSize = 0;
}

void CBigInt::Multply(int iNumber)
{
// 从低位向高位乘,不考虑进位
PNode p = this->pHead;
while (p != NULL)
{
p->Value = p->Value * iNumber;
p = p->pNext;
}
// 从低位再向高位进一遍位.
p = this->pHead;
while(p != NULL)
{
if (p->Value >= LMAX)
{
if (p->pNext == NULL)
{
this->AppendNode(0);
}
p->pNext->Value = p->pNext->Value + p->Value / LMAX;
p->Value = p->Value % LMAX;
}
p = p->pNext;
}
return;
}

void CBigInt::CalcF(int n)
{
this->setValue(1);
for (int i = 2; i <= n; i++)
{
this->Multply(i);
}
}

char * CBigInt::ToString()
{
// 计算链表的长度,分配足够的字符串
char *s;
char sTmp[20];

if (this->iSize == 0 )
{
s = new char[2];
sprintf_s(s, 2, "0");
return s;
}
int iLen = (this->iSize + 1 )* 9;
s = new char[iLen];
// 倒序10进制输出结果
// 第一个不要加0,之后的要补0.
sprintf_s(s, iLen, "%ld", this->pTail->Value);
PNode p = this->pTail->pPrev;
while(p != NULL)
{
::sprintf_s(sTmp, 20, "%04ld", p->Value);
::strcat_s(s, iLen, sTmp);
p = p->pPrev;
}

return s;
}

char * CBigInt::Add(CBigInt bi2)
{
// 从低位向高位加,不考虑进位
PNode p1 = this->pHead;
PNode P2 = bi2->pHead;
while (p1 != NULL && p2 != NULL)
{
p1->Value = p1->Value + p2->Value;
p1 = p1->pNext;
p2 = p2->pNext;
}
// bi2比较长, 把bi2长出来的部分加到自身
if (p1 == NULL)
{
while(p2!=NULL)
{
this->AppendNode(p2->Value);
p2 = p2->pNext;
}
}

// 从低位再向高位进一遍位.
p = this->pHead;
while(p != NULL)
{
if (p->Value >= LMAX)
{
if (p->pNext == NULL)
{
this->AppendNode(0);
}
p->pNext->Value = p->pNext->Value + p->Value / LMAX;
p->Value = p->Value % LMAX;
}
p = p->pNext;
}
return;
}

-----------------------------

热心网友 时间:2023-10-12 10:26

大整数的运算跟存储方式是相关的, 先贴贴输入输出的代码吧

热心网友 时间:2023-10-12 10:26

lz,你强调的是"任意大"?还是两整数?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 C#修改注册表,用SetValue总是不成功,如何修改我的程序? 水飞蓟和降酶灵 这两种药对肝的药效是如何? 如何快速减肥!! 如何才能快速减肥 ?如题 谢谢了 有一种油漆油墨的溶剂既慢干又能提高其漆膜的光泽度,是什么溶剂? 异氟尔酮可作为电泳漆溶剂吗 快餐店的生产部应做些什么 梅西,内马尔,苏亚雷斯啥时候在巴萨 bbc组合厉害还是msn 开环定位初始占空比多少 微信运动开启了为啥还是0步你好,微信运动开启了,为什么还是零啊? 亲切、自然、风趣、幽默是不是好词 淡雅风趣是什么意思 在正方形ABCD中,M是BC边(不含端点吧B,C)上任意一点,P是BC延长线上一点,N是∠DCP的平分线上一点,若 如图,在正方形ABCD中,M是边BC(不含端点B.C)上任意一点,P是BC延长线上一点,N是∠DCP的平分线上一点 如图1,在正方形ABCD中,M是BC边(不含端点B、C)上任意一点,P是BC延长线上一点,N是∠DCP的平分线 在正方形ABCD中,M是BC边上任意一点(不包括端点B C),P是BC延长线上一点,N是角DCP的平分线上一点, 求磷酸二钙的成分表,例如五氧化二磷含量多少.... 我喜欢上了一个重庆女孩,现在万分犹豫,求情感大师帮忙。 女子为提高孩子成绩,从“大师”处购买3888元灵宝!结果如何? 类的定义内 赋初始值 幼儿园的指导性目标包括哪些方面内容? 什么是战略性和指导性规划 上位规划是下位规划的指导性规划是哪种意思? 求助!!很简单的英语问题!!! 手忙脚乱意思解释 什么是用户研究? 梦见被人打脸庞的预兆 梦见丈夫被别人打脸的预兆 梦见被别人用刀割伤脸和屁股的预兆 梦见男友被别人打脸出血 看中国神话传说后有什么向小伙伴们提问的 魔都最好吃的6条美食街 乍浦路与城隍庙均上榜 召唤与合成2战旗高难怎么搭配阵容战旗高难关卡阵容推荐 冰淇淋为什么有冰渣子? 原神妮露绽放队怎么搭配 原神妮露配队攻略 3.2深渊使用率 妮露绽放队配置 原神妮露怎么搭配阵容