在C#中的大数运算的问题

zCheng 2005-07-31 12:03:03
我一直想做个大数运算的类,最近查了资料,看了文章,然后自己模仿别人的代码写了一个 BigInt 类。运算上似乎没有问题,因为无法验证——我的 BigInt 在输出上出了问题。我无法将 BigInt 表示的数有效的转换为字符串输出(输入方面没有问题),系统老是说堆栈溢出。哪位高手能帮忙看看出了什么问题。

仿照的是 afanty 的 CBigInt 类,由于我今年刚高中毕业,什么C#、VB.NET都是刚起步,连C都没有系统的学,所以不懂自己到底翻译对没有(其它部分省略,有必要时在给),希望有人能指正:

原示例的输出代码(C/C++):
// CBigInt.h 文件
...
#define DEC 10
...
// CBigInt.cpp 文件
//将 BigInt 输出为字符串
int CBigInt::OutPutToStr(CString& str, const unsigned int system=DEC)
{
str="";
char ch;
CBigInt X;
X.Mov(*this);
while(X.m_ulvalue[X.m_nLength-1]>0)
{
ch=X.Mod(system)+48;
str.Insert(0,ch);
X.Mov(X.Div(system));
}
return 0;
}
---------------------------------------------------

我的代码(C#,隐式转换):
int DEC=10;
// 在其他运算中,我用重载运算符(+,-,*,/,%,>、<、==、!=)来代替它的
// Add,Sub,Mul,Div,Mod,Cmp 方法;
// 符号我规定 1 为正,0 = 0 ,-1 为负。而且用 sbyte 替代 它的int
// 用赋值代替它的 Mov 方法。
// 重载了转换允许 BigInt 和 int/uint/long/ulong 等转换
/// <summary>
/// 允许将 int 变量隐式转换为大数 BigInt。
/// </summary>
/// <param name="a"> 要转换的 int 变量。</param>
/// <returns> 转换后的大数实例。</returns>
public static implicit operator BigInt(int a){
BigInt x=new BigInt();
x.m_ulValue[0]=(uint)Math.Abs(a);
x.Sign=(sbyte)Math.Sign(a);
x.nLength=1;
return x;
}
/// <summary>
/// 允许将 BigInt 实例隐式转换为 string 输出。
/// </summary>
/// <param name="x"> 要转换的 BigInt 变量。</param>
/// <returns> 转换后的大数实例。</returns>
public static implicit operator string(BigInt x){
string str="";
char ch;
while(x.m_ulValue[x.m_nLength-1] > 0) {
ch=(char)(int)(x % (BigInt)DEC + 48);
str = ch + str;
x/= DEC ;
}
return str;
}
...全文
339 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zCheng 2005-08-11
  • 打赏
  • 举报
回复
先谢谢了,如果调试成功我会加分的
zCheng 2005-08-01
  • 打赏
  • 举报
回复
各位高手帮帮小弟啦
youwanna 2005-08-01
  • 打赏
  • 举报
回复
你信得过我的话,把代码发我邮箱里吧,我帮你调试
crazythinking@gmail.com
zCheng 2005-07-31
  • 打赏
  • 举报
回复
重写了。算法和 implicit string 一样
youwanna 2005-07-31
  • 打赏
  • 举报
回复
有没有重写ToString方法

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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