- 注册时间
- 2007-12-26
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 92742
- 在线时间
- 小时
|
发表于 2009-1-13 10:04:09
|
显示全部楼层
优化后的代码
改自 33# mathe 的代码:- #include < stdio.h >
- #include < time.h >
- #include < HugeCalc.h >
- #include < HugeInt.h >
-
- #pragma comment( lib, "HugeCalc.lib" )
-
- #define integer CHugeInt
-
-
- #define MIN_EXP 9
- #define MAX_EXP 10
-
- int cc[MAX_EXP+1] = { 0 };
-
- void test()
- {
- time_t t=time(NULL);
- integer x("10000000002"), z;
- int i, j, d;
- int mt=MAX_EXP, c=33334;
- int count[256];
- int digits;
- LPCTSTR p;
-
- while( !(!( x-=3 )) )
- {
- z.Pow( x, MIN_EXP-1 );
- for(i=MIN_EXP,d=i*10; i<=mt; i++,d+=10)
- {
- z*=x;
-
- digits = z.GetDigits();
- if ( digits == d )
- {
- count['\0']=1;
- for(j='0';j<='9';j++)count[j]=i+1;
-
- for( p=z; 0!=--count[*p]; ++p)
- ;
-
- if ( '\0' == *p )
- {
- printf("\nNo.%u\t%s^%d=%s\n\n", ++cc[i], (LPCTSTR)x, i, p-d);
- fflush(stdout);
- }
- }
- else if( digits < d )
- {
- mt=i-1;
- if(mt<MIN_EXP)
- {
- printf("Total cost %dseconds\n", time(NULL)-t);
- return;
- }
-
- break;
- }
- }
-
- if( 0==--c )
- {
- fprintf(stderr,"\t%s, times %ds\n", (LPCTSTR)x, time(NULL)-t);
- c = 300000;
- }
- }
- }
-
- int main(int argc, char* argv[])
- {
- int i;
- test();
- for(i=MIN_EXP;i<=MAX_EXP;i++){
- printf("c[%d]=%d\n",i,cc[i]);
- }
- return 0;
- }
复制代码 |
-
-
eMathBBS_1125.zip
22.69 KB, 下载次数: 5, 下载积分: 金币 -1 枚, 经验 1 点, 下载 1 次
编译好的无任何限制的程序,可以任意指定幂次范围。
|