问题求解--一万阶乘,二分法排序算法

洪十二 2004-08-19 08:23:58
1.一万阶乘用十进制表示.
2.二分法排序算法

Help!
...全文
252 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
gbbword 2004-08-20
  • 打赏
  • 举报
回复
呵呵!
烤火的鱼 2004-08-20
  • 打赏
  • 举报
回复
二分法检索很简单,二分法排序到不知道.
洪十二 2004-08-20
  • 打赏
  • 举报
回复
waiting for your help
Flynxea 2004-08-20
  • 打赏
  • 举报
回复
加法是这样,乘法的话要复杂一些吧,32位的话,要16位16位的乘,然后再起来,好像效率不高啊
yichi 2004-08-20
  • 打赏
  • 举报
回复
自己做一个计数器,然后用无限个计数器串连就可以表示无限大的数了。

串连的原理时低位的计数器超出运算范围时就进位。进位在高位相当于1

这样处理一下把
eTopFancy 2004-08-20
  • 打赏
  • 举报
回复
二分法插入排序
在已排好序的序列中使用二分法查找插入位置,找到插入位置后和直接插入排序法同样处理。二分法插入排序将关键字比较次数降为nlog2n量级,记录移动次数仍为n2量级。
Flynxea 2004-08-20
  • 打赏
  • 举报
回复
可否提供源码让学习学习?谢谢
eflyinghi@163.com
test7979 2004-08-20
  • 打赏
  • 举报
回复
CSDN连10000!的结果都不让贴.... :)
test7979 2004-08-20
  • 打赏
  • 举报
回复
写一个支持无限精度数的类么,代码很长的
Flynxea 2004-08-20
  • 打赏
  • 举报
回复
楼上用什么算法的?源程序可否看看?
test7979 2004-08-20
  • 打赏
  • 举报
回复
C# 就是快 , 1分钟不到就搞定,前面几位是这样的....
10000! =
284625968091705451890641321211986889014805140170279923079417999427441134000376444377299078675778477581588406214231752883004233994015351873905242116138271617481982419982759241828925978789812425312059465996259867065601615720360323979263287367170557419759620994797203461536981198970926112775004841988454104755446424421365733030767036288258035489674611170973695786036701910715127305872810411586405612811653853259684258259955846881464304255898366493170592517172042765974074461334000541940524623034368691540594040662278282483715120383221786446271838229238996389928272218797024593876938030946273322925705554596900278752822425443480.......
huangsuipeng 2004-08-20
  • 打赏
  • 举报
回复
以往搞ACM的时候,一般是用数组来放一个超大超大的数的,全忘记了
eTopFancy 2004-08-20
  • 打赏
  • 举报
回复
同意 timiil(小华) 的思路,简易可行;
“二分法排序”是不是指二分法插入排序?
charliecy 2004-08-20
  • 打赏
  • 举报
回复
参考如下,pascal源码

归并排序
{a为序列表,tmp为辅助数组}
procedure merge(var a:listtype; p,q,r:integer);
{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}
var I,j,t:integer;
tmp:listtype;
begin
t:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}
while (t< =r) do begin
if (i< =q){左序列有剩余} and ((j >r) or (a[i]< =a[j])) {满足取左边序列当前元素的要求}
then begin
tmp[t]:=a[i]; inc(i);
end
else begin
tmp[t]:=a[j];inc(j);
end;
inc(t);
end;
for i:=p to r do a[i]:=tmp[i];
end;{merge}

procedure merge_sort(var a:listtype; p,r: integer); {合并排序a[p..r]}
var q:integer;
begin
if p< >r then begin
q:=(p+r-1) div 2;
merge_sort (a,p,q);
merge_sort (a,q+1,r);
merge (a,p,q,r);
end;
end;
{main}
begin
merge_sort(a,1,n);
end.
charliecy 2004-08-20
  • 打赏
  • 举报
回复
抱歉,发错帖,检讨
charliecy 2004-08-20
  • 打赏
  • 举报
回复
Component One系列中的FlexGrid组件功能强大,能完成你想要实现的功能
timiil 2004-08-20
  • 打赏
  • 举报
回复
lexchou(本人已死)==(有事烧纸) ( )
用那个方法计算的确快,呵呵,C#里结果是“正无穷大”

...
这么大的对数和直接求指数肯定会overflow啦!
得到指数和之后不会把它分成整数和小数部分再求么???
lexchou 2004-08-19
  • 打赏
  • 举报
回复
用那个方法计算的确快,呵呵,C#里结果是“正无穷大”
timiil 2004-08-19
  • 打赏
  • 举报
回复
阶乘的算法容易,考虑如下公式:
n! = 1*2*3....*n = 10 ^ [ lg(1) + lg(2) + lg(3) + ... + lg(n) ]
具体方法就是求由1到n的对数和(用10为底的常用对数吧),最后把对数和的整数部分就是最后结果的阶,剩余的小数值求反对数(就是指数)即可.

这是懒汉方法,代码10余行,亿阶乘也没有问题.

lexchou 2004-08-19
  • 打赏
  • 举报
回复
10000的阶乘结尾有21111个0, 寒..................至少也估计1万位了

110,536

社区成员

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

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

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