计算 30000 的阶乘 !

Terark-CTO-雷鹏
博客专家认证
2002-01-11 02:58:44
/* This file "jiech2.c"
created at 2001-08-24 20:15:22
by LeiPeng .
*/

#include <conio.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXN 0X7000

int a[MAXN];

int main(int argc,char *argv[])
{
int n,m,i,j,c,t;
printf("Enter n(n>=2) :");
while(1)
{
scanf("%d",&n);
if(n>=2&&n<=3276) break;
printf("must be 2<=n<=3276");
}
a[0]=1; m=1;
for(i=2;i<=n;i++)
{
for(c=0,j=0;j<m;j++)
{
t=a[j]*i+c;
a[j]=t%10;
c=t/10;
}
while(c)
{
a[m++]=c%10;
c/=10;
}
}
printf("%d!=\n",n);
for(i=m-1;i>=0;i--) putchar(a[i]+0x30);
printf("\npress any key to continue .\n");
getch();
return 0;
}
...全文
3985 58 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenkan2000 2002-01-15
  • 打赏
  • 举报
回复
吸取教训,以后要三思而行。
LLnju 2002-01-15
  • 打赏
  • 举报
回复
我觉得即使使用 dec 打印出来,真正感兴趣的人我看不会很多,我觉得用计算机的人应该比较习惯于 hex,毕竟计算机是使用 2进制的,我觉得用 hex 就很自然了。
QQKiKi 2002-01-15
  • 打赏
  • 举报
回复
有没有人用二进制算啊~~ 用最基本的原码乘法,模拟3寄存器
Terark-CTO-雷鹏 2002-01-15
  • 打赏
  • 举报
回复
呵呵,我计算过这个算法的时间复杂度,好像是 (n^2)*log(n) .

用汇编的确可以优化很多,用 hex 的确可以节省内存(一位数字只需 4 bit),又可以减少乘除法次数(计算时一次乘法就算了 32 bit,即 8 个数字位,打印时用移位代替除法)。

不过,这只可以作为内部表示,十六进制没有几个人喜欢。为了让大家喜欢,可以用 8421bcd 。在汇编语言中用十进制的乘法和除法指令,应该要比 C 快许多。
LLnju 2002-01-15
  • 打赏
  • 举报
回复
有什么教训,不懂啊
LLnju 2002-01-14
  • 打赏
  • 举报
回复
...
3000! :
98e50e08013d7ca50f2e2752c7698012ceaee8fc6f6676bd5b5a0075f8f74a0aec896a64140531ed
986fea4f4d542b7e29bc9e9dc030535dd6eaf476a355d24ded52be2aff421f680224a4b651c04d7b
d4f47a35901f872d0a9692e90dce461223c8262be8d25653593f0c2b2f5fd5e11d1b5356072e06fa
802975b52e4f438a28e1f6546eb1fce936cb0974880b41563503d1f53bac36896f67bf167f5bfc91
b0e118e0fcaf3fa50a35ede4d67c4a4b9966f3e29e6cc250972401181379b8cd9547d28f284d93eb
32ec592df172f048cb2821e5e0d0bef31d3d9d754ec8ba8448f928f5c9c87038168f03f4b0615fe5
92767f3db9fae6296275eb03397b08a0e9853c850fdf9ad32de97a74546459f3f971d7e607f86be4
44a99b44b993437e53ae0e8975159ec937fb6e1274e2c6a846c8fc2b31259b8ac19c4cde8d968ec5
079043bb85deda8386a250587583d501abc67f79adc4045d01f817dfca185c9c67b263dd4f1789be
948b5fe8dd42b32989da24df4bc10c9e543df5466fd790da56db057480a5c4f7d1c44fd7fef601c8
f42bb5c16a9e2fc22c743956080c62f5ffe3400b43614b3f2de7fe16d74e4a5c91d33b3708371006
5f5b04d6be33d484ca7266497a5974b229f6f6dd579388db03dd8311bf140d90210a0a1753f95a36
8d3950524a974ba60fb550a911b7b8d3d351fa737ca88ea4bcada8e990b0603168b357ee00b19d66
8a053b9e7705e6d514c3c19999957cb065f3f5ea0d958465d2a1ca780a3dc022fc9eeec7ab2e9a5f
88f26c226af33a4433ed9ee1084d6af9a8536ec73abb12226f47ccabe06ebc3fdc1f6f5bb617785e
155c38b8b913a5d06ba59ff05b7d2ac15e04facb5145ba5d8cfc0dd6101a62a05dc86406d10ebd5b
fed0b304d9435bc0ad4e8794715e0d07263fbbf5563fc4fd12cd1064073cfddc1d04aa98fdec8058
91fc5c5505c9b3335ed541e7896877278101456f2250a179c40e325ae75b35f9a25a708940c3fa94
83c0c2effd438836a7d1b5a71c2ce6b040613209c6f53fd2f63e9b97a2c2c4f01a98ccbff5814a22
ff91509b65a162d7b3ec4be591a61253ff304ce11cd5aebfb876714307a6083bb886542eaa2bec98
876690f6fc7c58be72229d9f3a885c853028876d6710d98c9f010555e8706dd6f8d59e6ff63b4a64
357a9911bd7534d4b252444a9a328a08ef7e991e605e18ad43bdf1f9bd1e9eeb276b16e01873f7ee
25e1cb0f03a670261e923a71e6f4069af48a683a3a62919c1be1c1df4957f8d943a6241971a29509
fac5b8105c612e449d6324b7694f0c8dd74f4c01ea452c0f0270e75e7cdc9a420140c153f239367e
09cffa4a65846f9cde8a67fc7f5f87fac8a24cd265c15e4d22952914425b3aa7f568eb66592fc186
337d26fa54a5793b41e9c2462ddab48e18c2eb4538a77a1d08339972a72fd5f493c7e9530ee90a92
0814d4ba4847603fb477475c733e5bdc6890382a6650aeeb32b7ce5929f6180282353cd3542bad47
a1752784f2cfacb2d70867e9d1e282aeb12096f36b56b9b008248353068e385d7741e3e5e201903e
b804890651dfb664db8c43e1985e0e893ba4adb9d593c0d486a984e3c2dbb0456fcbe99ef4fc1130
47f72a2c82e38345b5379a05a13e9e0ee0bffd4db4cb90ded680fe6eb1220450be92972cb8a10817
b0d5d102fb81df9daedb0b42c9b145724a0a645366968ce2e33e40e5de90caadd75a74a0a2ab1fdb
0a7e7ff338a17f324c39dc5a9f708f06860e982cc429df94d54b5c1a145cc4641b04c531abbb058e
a388437c89dbf8650ca0497440625958c52ff4640b7536d1b1fd74745ad5981819ca75404e6aa58e
cc735e078739a19a68677aaa1e066dd5da8ab26dda2347e453ea64898cb27a6c8b4402ab95c6d5b7
179a755fba90f66d937f3dae9d24f34a3201e5a1f8e9f095a37919b66d2828075ae2b434bb08827e
e0d8be1d3ea420896f4b4cff12d0553ae0919bb5d3effe462f4b0a47dae78988af2f4397e7b9d2cb
b46e3277029de4cdc782b7f92b1df86dc23585d32a5b231613ee4a8cf932d0958e251680431dacc9
0a5d831284ccffa480b8e89cd75855fbf8f0a12ebdf2dfb40e3769dc56c89d6f5d17e7721d7014fe
3f82457d4a3774bee7c9a8233bd7d524408f82e222424684574abcd88d7304c0fb16d3125cf515a9
5f2f07447b06f5560d01f848702532a25ef24c344f3f75ce1cfb11c0c62cddb721f88ca4a2d80301
1fe7e6a30d45c94d71ac21ed6741fbc73e3d94ce01954ff2e9fa40f36c7d9854679adf5b1424b734
b449e9fb653167e139c0edc4d2776305873e7bfa95467cb5a377fae4f6f64ca11521def6cf6f011c
e18927c1acb8f3273622c3088da5ac01981bc6e983f51a2a6fd62031b70aa3f2996f5dc49e7f6e25
f65fb137afdbcefe30cd86ef357a2ee842cb1583786d82c60ee868a2b37c5d0dcb84894fec30f1eb
de754c35c166a1ff871f02c19360094d1dbc325d00e88867c6163a5207b332c7d5df041275787c8f
d2c01a6bb140585071d39fc0651708ec3561904603affcf5d51339a47c7d3eedf34ead4bb8cbae88
55a5a469c311e5aaae02fc61bd967a12de465bceceae2878a9a03b59fa65afb3c85bd3b1b43da658
b2c45756f5af399c1b30fb9e7c6f4ad68819c49f9422fbb7fd151b979e94804d180f46154cb9b2c9
68e6cb9e38d8d77bee7d0b38f6ffd79f93dd8bd40b3f153fe0e02566c4e43e2c5392cb28d1e1997b
b1e7c909467d2554529217c8e306a2fe28e60620374f6f4ee3b10f3c845f395598963a85de5925cb
4f58086691f68f13f835f4fa5455e8de2767f7f535aa45405d1d100c5ffbf22b02a6d9fb210c95ee
53ad960c5f0abd520e07bf2c10af61384fead123ab319c8b8c518b5035a0aec92ecdd15775e269e0
5c97e33e9dad199790335214cae8e3d60883fec7e9540c2f1cb805d919a41fdb0b61bb85ad2df098
d9726f5ff6c4008b3a3ffdffc59c9c53db5b28447b049fe91d5d147bdf36f6e387e276ae28809614
5cbe080415a9a340857ad432fdf4064e952fe2af648db3a3ce6371dd18773a5ee31c1743463753a6
5f68affe8000bcb1a3872e0fc26e6bc77161759d14334bd852bf24f9531c32628b4ec8269b9fbced
8bfe7b7e5aeb5a2c69cefecc8f5bd507b36139af459d3df776ca7598fb49b531c3fec095a5cda1d6
5bc0acd5741b31829af6ef4ad74e01eefdffb78171eb0a0d3cfa1a2a6ef0f111ec9a7bfa67c6fd1e
ffc9be60854fc64a20ce77e0bb234914ff3d890135b90711912ef742d870cdeaa636f7c1e7459248
8a952e897a78b4c1b75c8d0bbc9f34dfe8ee3b8f13e1bd223f404c151fb85461e4a7db3b97c6e7f3
41e77c44661bb584c99c448fc3fafcd4781a5d89f3663db91be4119b39b177679ae05b6de9d2926c
6fb1cd1fcc9351923cbfa60ee8931a94033752639ff63ad29f742f516cabf642d91820ac333fc0b8
c44324b667b13bb4de020452bd4636c3bb05f27a253283386f6cc5956a910db198cf11110aef152a
b4aac319b91e62c2b8ef5a08a92fb4c96cedbc35b97fa414a9e2335fc538c0e15855eef03901dfdc
45e9f0f90c6c9bc61d5f2eeca9e6a1174eaa0cfa734f30531ae5bf47cfd63fc90cac6ad583bc7084
c439448c74db4b48cc111c18c948474aa281540a1d15c471265a2cda84d9017f676823d542687aa7
70a7c676161041bf88b04187f0aadf5349cbf03af961ae1a9d5aa13e4001cc1560a10e61564f4262
815668c8c9e84504e8c07e8973ea29378c216ecffe916e8caa03da666e026d2bc538697d3797c5a4
ff60ef91a6ceac77d5b85244d4ff8c36b08b1e5b2c5b9699db4648c0445c1e0b5f02d0247015a226
9443d20b44256fc09c6e8c062be975b45fb5c7dff26a3c2413328fe07af673ff4e7efe3e39cb248e
1cc9aa265ebceeb9cb7504175f85b5c66580213b4ca568d89d290cdd5c3ede19954fb59b252046b9
f3797850e143da543871c344a9ef4e849986a597e60cc4c9f120b89ca08a42b8e5e3eb6bf0536ee1
8321607da984452bad3d4aa70d3a548e1c7e8f1ca965d13e4b1d8208b56f580716cae060412c0b6c
97cbf468b2f6740d3eea5d56776ba7153e8cfe3a47b7a2b2b031fd034e25cd317bcd264813957cef
0b2070ec43bf8eede2cd4fc383729c18cac9629f781f8f1d83f968bb775b5e37b94ab724e5a706b3
c05523042a40ce87f3d90195e70a89a96ba912bbcb856ed29cd180bd604c4521cf5c06f2aa8cf954
dda9195e7422ac1eadd0b112b85339d669a743d83ce02051d12a6639d15e95b415f45a8295e74125
cb9ba04fddfb5fcbdf829d81a2b679d9843277be9b4344a3b09402a7b92fc54679f8b4e8ae76e794
291b01c4662be2414ec11fffb5921250dc63ab67aeef4f044101a98e179eb1045c0692dd6085af76
159fca0c9750a3deac1d52ae82d2ccb25d9b209a39c1f0da5b75cf5bd56afbfbaa08e31d3d6a6504
b238f555e13dbe717a418030277d3b09f7a25cc65426634544d2d25b84c597171666bbf8fb019b5a
9633835037301b7c5c45be355bf6811b609d2edc26a68c25bffc37d24eb9ab0201b970b47fa87916
cc98d01f95e9247ff65d8c8ed1bf558b572a801a337d7df63e048f11eca8e3f8c7ddc882ed47fd72
78ab121f24f8123fae2ed9498df9eea32997ecc46fb5b785721d398e59a44bd11e0cee67e84f6e3b
3e71e168dda53b168193dcbd8fabfd0da0fb0b0eef83fa11f6b8b0a32e68739f7ff7f29f58b351c5
0ef2cafb49197dc78454c1659aa13bdac56000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000


Time used:1332ms
Press any key to continue
Bug_Debug 2002-01-14
  • 打赏
  • 举报
回复
csdn 怎么把我的数据给截断了,太可恶了
LLnju 2002-01-14
  • 打赏
  • 举报
回复

3000! :
98e50e08013d7ca50f2e2752c7698012ceaee8fc6f6676bd5b5a0075f8f74a0aec896a64140531ed986fea4f4d542b7e29bc9e9dc030535dd6eaf476a355d24ded52be2aff421f680224a4b651c04d7bd4f47a35901f872d0a9692e90dce461223c8262be8d25653593f0c2b2f5fd5e11d1b5356072e06fa802975b52e4f438a28e1f6546eb1fce936cb0974880b41563503d1f53bac36896f67bf167f5bfc91b0e118e0fcaf3fa50a35ede4d67c4a4b9966f3e29e6cc250972401181379b8cd9547d28f284d93eb32ec592df172f048cb2821e5e0d0bef31d3d9d754ec8ba8448f928f5c9c87038168f03f4b0615fe592767f3db9fae6296275eb03397b08a0e9853c850fdf9ad32de97a74546459f3f971d7e607f86be444a99b44b993437e53ae0e8975159ec937fb6e1274e2c6a846c8fc2b31259b8ac19c4cde8d968ec5079043bb85deda8386a250587583d501abc67f79adc4045d01f817dfca185c9c67b263dd4f1789be948b5fe8dd42b32989da24df4bc10c9e543df5466fd790da56db057480a5c4f7d1c44fd7fef601c8f42bb5c16a9e2fc22c743956080c62f5ffe3400b43614b3f2de7fe16d74e4a5c91d33b37083710065f5b04d6be33d484ca7266497a5974b229f6f6dd579388db03dd8311bf140d90210a0a1753f95a368d3950524a974ba60fb550a911b7b8d3d351fa737ca88ea4bcada8e990b0603168b357ee00b19d668a053b9e7705e6d514c3c19999957cb065f3f5ea0d958465d2a1ca780a3dc022fc9eeec7ab2e9a5f88f26c226af33a4433ed9ee1084d6af9a8536ec73abb12226f47ccabe06ebc3fdc1f6f5bb617785e155c38b8b913a5d06ba59ff05b7d2ac15e04facb5145ba5d8cfc0dd6101a62a05dc86406d10ebd5bfed0b304d9435bc0ad4e8794715e0d07263fbbf5563fc4fd12cd1064073cfddc1d04aa98fdec805891fc5c5505c9b3335ed541e7896877278101456f2250a179c40e325ae75b35f9a25a708940c3fa9483c0c2effd438836a7d1b5a71c2ce6b040613209c6f53fd2f63e9b97a2c2c4f01a98ccbff5814a22ff91509b65a162d7b3ec4be591a61253ff304ce11cd5aebfb876714307a6083bb886542eaa2bec98876690f6fc7c58be72229d9f3a885c853028876d6710d98c9f010555e8706dd6f8d59e6ff63b4a64357a9911bd7534d4b252444a9a328a08ef7e991e605e18ad43bdf1f9bd1e9eeb276b16e01873f7ee25e1cb0f03a670261e923a71e6f4069af48a683a3a62919c1be1c1df4957f8d943a6241971a29509fac5b8105c612e449d6324b7694f0c8dd74f4c01ea452c0f0270e75e7cdc9a420140c153f239367e09cffa4a65846f9cde8a67fc7f5f87fac8a24cd265c15e4d22952914425b3aa7f568eb66592fc186337d26fa54a5793b41e9c2462ddab48e18c2eb4538a77a1d08339972a72fd5f493c7e9530ee90a920814d4ba4847603fb477475c733e5bdc6890382a6650aeeb32b7ce5929f6180282353cd3542bad47a1752784f2cfacb2d70867e9d1e282aeb12096f36b56b9b008248353068e385d7741e3e5e201903eb804890651dfb664db8c43e1985e0e893ba4adb9d593c0d486a984e3c2dbb0456fcbe99ef4fc113047f72a2c82e38345b5379a05a13e9e0ee0bffd4db4cb90ded680fe6eb1220450be92972cb8a10817b0d5d102fb81df9daedb0b42c9b145724a0a645366968ce2e33e40e5de90caadd75a74a0a2ab1fdb0a7e7ff338a17f324c39dc5a9f708f06860e982cc429df94d54b5c1a145cc4641b04c531abbb058ea388437c89dbf8650ca0497440625958c52ff4640b7536d1b1fd74745ad5981819ca75404e6aa58ecc735e078739a19a68677aaa1e066dd5da8ab26dda2347e453ea64898cb27a6c8b4402ab95c6d5b7179a755fba90f66d937f3dae9d24f34a3201e5a1f8e9f095a37919b66d2828075ae2b434bb08827ee0d8be1d3ea420896f4b4cff12d0553ae0919bb5d3effe462f4b0a47dae78988af2f4397e7b9d2cbb46e3277029de4cdc782b7f92b1df86dc23585d32a5b231613ee4a8cf932d0958e251680431dacc90a5d831284ccffa480b8e89cd75855fbf8f0a12ebdf2dfb40e3769dc56c89d6f5d17e7721d7014fe3f82457d4a3774bee7c9a8233bd7d524408f82e222424684574abcd88d7304c0fb16d3125cf515a95f2f07447b06f5560d01f848702532a25ef24c344f3f75ce1cfb11c0c62cddb721f88ca4a2d803011fe7e6a30d45c94d71ac21ed6741fbc73e3d94ce01954ff2e9fa40f36c7d9854679adf5b1424b734b449e9fb653167e139c0edc4d2776305873e7bfa95467cb5a377fae4f6f64ca11521def6cf6f011ce18927c1acb8f3273622c3088da5ac01981bc6e983f51a2a6fd62031b70aa3f2996f5dc49e7f6e25f65fb137afdbcefe30cd86ef357a2ee842cb1583786d82c60ee868a2b37c5d0dcb84894fec30f1ebde754c35c166a1ff871f02c19360094d1dbc325d00e88867c6163a5207b332c7d5df041275787c8fd2c01a6bb140585071d39fc0651708ec3561904603affcf5d51339a47c7d3eedf34ead4bb8cbae8855a5a469c311e5aaae02fc61bd967a12de465bceceae2878a9a03b59fa65afb3c85bd3b1b43da658b2c45756f5af399c1b30fb9e7c6f4ad68819c49f9422fbb7fd151b979e94804d180f46154cb9b2c968e6cb9e38d8d77bee7d0b38f6ffd79f93dd8bd40b3f153fe0e02566c4e43e2c5392cb28d1e1997bb1e7c909467d2554529217c8e306a2fe28e60620374f6f4ee3b10f3c845f395598963a85de5925cb4f58086691f68f13f835f4fa5455e8de2767f7f535aa45405d1d100c5ffbf22b02a6d9fb210c95ee53ad960c5f0abd520e07bf2c10af61384fead123ab319c8b8c518b5035a0aec92ecdd15775e269e05c97e33e9dad199790335214cae8e3d60883fec7e9540c2f1cb805d919a41fdb0b61bb85ad2df098d9726f5ff6c4008b3a3ffdffc59c9c53db5b28447b049fe91d5d147bdf36f6e387e276ae288096145cbe080415a9a340857ad432fdf4064e952fe2af648db3a3ce6371dd18773a5ee31c1743463753a65f68affe8000bcb1a3872e0fc26e6bc77161759d14334bd852bf24f9531c32628b4ec8269b9fbced8bfe7b7e5aeb5a2c69cefecc8f5bd507b36139af459d3df776ca7598fb49b531c3fec095a5cda1d65bc0acd5741b31829af6ef4ad74e01eefdffb78171eb0a0d3cfa1a2a6ef0f111ec9a7bfa67c6fd1effc9be60854fc64a20ce77e0bb234914ff3d890135b90711912ef742d870cdeaa636f7c1e74592488a952e897a78b4c1b75c8d0bbc9f34dfe8ee3b8f13e1bd223f404c151fb85461e4a7db3b97c6e7f341e77c44661bb584c99c448fc3fafcd4781a5d89f3663db91be4119b39b177679ae05b6de9d2926c6fb1cd1fcc9351923cbfa60ee8931a94033752639ff63ad29f742f516cabf642d91820ac333fc0b8c44324b667b13bb4de020452bd4636c3bb05f27a253283386f6cc5956a910db198cf11110aef152ab4aac319b91e62c2b8ef5a08a92fb4c96cedbc35b97fa414a9e2335fc538c0e15855eef03901dfdc45e9f0f90c6c9bc61d5f2eeca9e6a1174eaa0cfa734f30531ae5bf47cfd63fc90cac6ad583bc7084c439448c74db4b48cc111c18c948474aa281540a1d15c471265a2cda84d9017f676823d542687aa770a7c676161041bf88b04187f0aadf5349cbf03af961ae1a9d5aa13e4001cc1560a10e61564f4262815668c8c9e84504e8c07e8973ea29378c216ecffe916e8caa03da666e026d2bc538697d3797c5a4ff60ef91a6ceac77d5b85244d4ff8c36b08b1e5b2c5b9699db4648c0445c1e0b5f02d0247015a2269443d20b44256fc09c6e8c062be975b45fb5c7dff26a3c2413328fe07af673ff4e7efe3e39cb248e1cc9aa265ebceeb9cb7504175f85b5c66580213b4ca568d89d290cdd5c3ede19954fb59b252046b9f3797850e143da543871c344a9ef4e849986a597e60cc4c9f120b89ca08a42b8e5e3eb6bf0536ee18321607da984452bad3d4aa70d3a548e1c7e8f1ca965d13e4b1d8208b56f580716cae060412c0b6c97cbf468b2f6740d3eea5d56776ba7153e8cfe3a47b7a2b2b031fd034e25cd317bcd264813957cef0b2070ec43bf8eede2cd4fc383729c18cac9629f781f8f1d83f968bb775b5e37b94ab724e5a706b3c05523042a40ce87f3d90195e70a89a96ba912bbcb856ed29cd180bd604c4521cf5c06f2aa8cf954dda9195e7422ac1eadd0b112b85339d669a743d83ce02051d12a6639d15e95b415f45a8295e74125cb9ba04fddfb5fcbdf829d81a2b679d9843277be9b4344a3b09402a7b92fc54679f8b4e8ae76e794291b01c4662be2414ec11fffb5921250dc63ab67aeef4f044101a98e179eb1045c0692dd6085af76159fca0c9750a3deac1d52ae82d2ccb25d9b209a39c1f0da5b75cf5bd56afbfbaa08e31d3d6a6504b238f555e13dbe717a418030277d3b09f7a25cc65426634544d2d25b84c597171666bbf8fb019b5a9633835037301b7c5c45be355bf6811b609d2edc26a68c25bffc37d24eb9ab0201b970b47fa87916cc98d01f95e9247ff65d8c8ed1bf558b572a801a337d7df63e048f11eca8e3f8c7ddc882ed47fd7278ab121f24f8123fae2ed9498df9eea32997ecc46fb5b785721d398e59a44bd11e0cee67e84f6e3b3e71e168dda53b168193dcbd8fabfd0da0fb0b0eef83fa11f6b8b0a32e68739f7ff7f29f58b351c50ef2cafb49197dc78454c1659aa13bdac560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


Time used:150ms
LLnju 2002-01-14
  • 打赏
  • 举报
回复
100! :
1b30964ec395dc24069528d54bbda40d16e966ef9a70eb21b5b2943a321cdf10391745570cca942
c6ecb3b72ed2ee8b02ea2735c61a000000000000000000000000


Time used:90ms
Press any key to continue
LLnju 2002-01-14
  • 打赏
  • 举报
回复
100000! 我已经算完了,用我自己写的算法共用时 463897 毫秒(C300A,128M),结果大概有 37.9 万个16进制位,cryptlib 的大数运算库在输出结果时特别慢,用时超过了20分钟,不知怎么回事,我把我的程序贴出来,仓促之间写成,所以说可以优化的地方还有很多,大家帮我改改。

#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;

#define USINGCRYPTPP 0

#ifndef USINGCRYPTPP
#define USINGCRYPTPP 0
#endif

const size_t nBufSize = 1024 * 1024;

typedef __int64 QWord;
typedef unsigned long DWord;
typedef unsigned short Word;

const DWord MAXN = 100000;

#if defined(USINGCRYPTPP) && USINGCRYPTPP

#include "/LLWSP/ACryptoLib/cryptlib/integer.h"
#ifdef _DEBUG
#pragma comment( lib, "/cryptlib/debug/cryptlib.lib" )
#else
#pragma comment( lib, "/cryptlib/release/cryptlib.lib" )
#endif
using namespace CryptoPP;

#else

union QWordVal
{
struct
{
DWord Lo;
DWord Hi;
}dwVal;
QWord qwVal;
};

QWordVal valBuf[ nBufSize ];
size_t szBuf;

void rawInitBuf()
{
memset( valBuf , 0 , sizeof( valBuf ) );
valBuf[0].qwVal = 1;
szBuf = 1;
}

void rawMulDWord( DWord dw )
{
_asm {
mov ecx , szBuf
mov edi , offset valBuf
mov ebx , dw
mul1:
mov eax , DWORD ptr [edi]
mul ebx
mov DWORD ptr [edi] , eax
mov DWORD ptr [edi+4] , edx
add edi , 8
loop mul1

//!
clc
xor ebx , ebx
mov ecx , szBuf
mov edi , offset valBuf
aam1:
mov eax , DWORD ptr [edi + 4]
adc DWORD ptr [edi + 8] , eax
mov DWORD ptr [edi + 4] , ebx
add edi , 8
loop aam1

cmp DWORD ptr [edi] , 0
jz aamend
inc szBuf
aamend:
};
}

ostream& hexOutputValue( ostream& os )
{
os << hex << valBuf[ szBuf - 1 ] .dwVal.Lo;
for( int i = szBuf - 2 ; i >= 0 ; i -- )
{
os.fill( '0' ); os.width( 8 );
os << hex << valBuf[i].dwVal.Lo;
}
return os;
}

#endif

void main()
{
::SetPriorityClass( ::GetCurrentProcess() , REALTIME_PRIORITY_CLASS );
DWORD nBegin = ::GetTickCount();
#if defined(USINGCRYPTPP) && USINGCRYPTPP
cout << "Using Cryptlib" << endl;
Integer nVal = Integer::One();
for( DWord n = 2; n <= MAXN; n++ )
{
if( n % 1000 == 0 ) cerr << '.';
nVal *= n;
}
cout << endl << MAXN << "! :" << endl;
cout << hex << nVal << endl << endl;
#else
rawInitBuf();
for( DWord n = 2; n <= MAXN; n++ )
{
if( n % 1000 == 0 ) cerr << '.';
rawMulDWord( n );
}
cout << endl << MAXN << "! : "<< endl;
cout << hexOutputValue << endl << endl;
#endif
cout << endl << "Time used:" << dec << ::GetTickCount() - nBegin << "ms" << endl;
}




LLnju 2002-01-14
  • 打赏
  • 举报
回复
to goodsong:
http://the.wiretapped.net/security/cryptography/libraries/cryptolib/
http://www.cryptopp.com
下载去
LLnju 2002-01-14
  • 打赏
  • 举报
回复
在 CII535 , 256M , 20G 上的运行速度:
100! : 50ms
1000! : 60ms
3000! : 110ms
10000! : 711ms
50000! : 39507ms
100000!: 314062ms
U_U 2002-01-14
  • 打赏
  • 举报
回复
关注~~~~~~~~~~~~~~~~~~~~
LLnju 2002-01-13
  • 打赏
  • 举报
回复
明明已经算出来了嘛,那有那么麻烦,100000! 我都已经算出来了,用时不过10分钟不到,现在的任务是怎么实现速度更快,还有算 n! 还用递归,真的想得到啊,不要使用字符串,太慢了。可以用 使用 每 4Bytes 存放 2Bytes 的数据,这是 cryptlib 的算法,就是我上面写的,但我想可能用 8Bytes 存放 4Bytes 数据可能会更快一点,关键部分使用 汇编 优化,需要的内存不会超过 500K , 要 4G 还亏你想得到啊,你认为 3000! 很大吗,真的不大啊,计算 3000!时间小于 10秒。
sharp_shooter 2002-01-13
  • 打赏
  • 举报
回复
我的妈啊,头痛
Kreutzer 2002-01-13
  • 打赏
  • 举报
回复
FruedStone(不好意思):
我相信是我对了,您可以用Windows的“计算器”验证一下数量级。
FruedStone 2002-01-13
  • 打赏
  • 举报
回复
阶乘的算法应该知道吧。
写一个链表
重栽+、*
就可以实现了
cxb_zdl 2002-01-13
  • 打赏
  • 举报
回复
各位算得结果的大侠:
I 服了 you.
小虾看不懂C++,
能否说说算法?
谢谢。
goodsong 2002-01-13
  • 打赏
  • 举报
回复
to LLnju(LLnju):
能把你使用的整数运算库给我一份吗?
agoodsong@yeah.net
谢谢!
FruedStone 2002-01-13
  • 打赏
  • 举报
回复
我算的100!更前面的那位不同不知道是谁的不对???
100!=111712711389295996138717299251429223784398870314662309406316003639217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
加载更多回复(38)

15,445

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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