65,210
社区成员
发帖
与我相关
我的任务
分享
//环_境:VC6.0,Console Application
//原_理:π=2+1/3*(2+2/5*(2+3/7*(2+...
//特点:内嵌_汇编提速并扩大了计算范围
//限制:位数ws原则_上没有限制但因为本
//算法_的时间正比于ws的_平方所以将位_数
//控制在二、三十万以内较好。本人_曾用
//奔Ⅳ2.6GHz算20万位,耗时10分钟_左右
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
long a=100000L;
void main()
{ FILE *fp;
long t1,t2;
char filename[40];
unsigned long c,d,e,i,j,ws;
unsigned long *f,*bb;
printf("位数=?");
scanf("%ld",&ws);
if(ws<1)return;
c=(ws+4)/05*17;
bb=f=(long*)malloc(04*c);
if(f==NULL)abort();
printf("将Pi存为: ");//提示输入数据文件名
scanf("%s",filename);//若打入NUL,则不_存盘
fp=fopen(filename,"w");
if(fp==NULL)abort();
t1=time(NULL);
for(i=0;i<c-1;i++,bb++)
*bb=a/5;*bb=a/5;//这里并_不错
for(e=0;c;c-=17,bb-=17,e=d%a)
{ static long group;
d=0;i=c;
j=c+c-1;
_asm mov eDI,bb
loopi:
_asm mov eax,[eDI]
_asm mul Dword ptr a
_asm mov ecx,edx
_asm mov ebx,eax
_asm mov eax,d
_asm mul dword ptr i
_asm add eax,ebx
_asm adc edx,ecx
_asm div dword ptr j
_asm mov d,eax
_asm mov [eDI],edx
_asm sub eDI,04
_asm dec dword ptr j
_asm dec dword ptr j
_asm dec dword ptr i
_asm jnz loopi
e += d/a;//这是为了避免重_复_计算
if(e>=100000)//这是一_种糟糕情况
abort();//希望它最_好不要发生
if(++group%200==0) //逢千_位_附近
printf( "%05lu\t",e);//显示五位
fprintf(fp,"%05lu",e);//写入_磁_盘
}
t2=time(NULL);
printf("%ld秒\n",t2-t1);
free(f);
fclose(fp);
}
#include <stdio.h>
#define iii\
( I ) if ( ii(I,6\
) )I [ strlen(I ) -1]=!1
int ii(ll,lll ) char*ll; {
char *l="\"; !l ? 1.1 : l; l,printf(";int l1=1-/*+&|"); &+|-*/1,li=!1;while
( lll>l1 ) li|=! ( l[3*l1+++3
] -ll[strlen ( ll)-1] ) ;return
( li ) ;}main ( ll,lll
) char*lll[];{char l1 [ 111][21],li1[111][21 ] ,il1[111],i1l
[ 111 ] ;int lli,l11,l1l,li/* ( */,ll1,il,l;FILE*f;if(ll-2
) {f=fopen ( lll[1],"r" ) ;lli=l=ll1=il=!1;while
( fscanf(f,"%s",l1[lli] ) +1){li=ii ( l1[lli],3
) ;iii ( l1[lli] ) ;l1l=l11=!1;while
( l1l>-ll ) {iii ( lll[-l1l]
) ;strcasecmp ( lll[-l1l--],l1[lli] ) ||
( l11=++il ) ;}l11||lli++;if ( li
) {if ( ll1<il ) {ll1=il;l1l=l=lli;while
( l1l-- ) strcpy ( li1[l1l],l1[l1l]
) ;}il=lli=!1;}}if ( !ll1 ) puts
( " Beats me." ) ;else if ( !l
) puts ( " Yes." ) ;else{*li1[l1l=!1]=toupper
( *li1[!1] ) ;while ( l>l1l
) printf ( " %s",li1[l1l++] ) ;puts
( "." ) ;}}else{sprintf ( il1,"cat %s;echo",lll[1]
) ;system ( il1 ) ;}printf
( "\n? " ) ;gets ( il1
) ;sprintf ( i1l,"%s %s %s",lll[!1 ] ,lll[1],il1);system
( i1l); }long i = 0L;
while (i++ < 10000000000000L);
printf("%ld\n", i);
void main()
{
int delay=GetTickCount();//get time
double speed=30*3600;//frame*time
while(1)
{
int difftm = GetTickCount() - delay;
if(difftm < speed)
{
// ::Sleep(speed - difftm);//主动放弃CPU使用时间
}
else
{
break;
}
}
}
#include<stdio.h>
int main()
{
int data[20000]={1,1,0}; //初始化,数组从1开始记数
int num; //阶乘大小
int digit=1; //每次阶乘得出结果的位数
scanf("%d",&num);
for(int i=1;i<=num;i++)
{
for(int j=1;j<=digit;j++)//先做每一位与i的乘积放在一个数组空间中
{
data[j]*=i;
}
for(int j=1;j<=digit;j++)//调整个元素的值,使之在0--9之间
{
if(data[j]>9)
{
for(int k=1;k<=digit;k++)
{
if(data[digit]>9) //位数增加
{
digit++;
}
data[k+1]+=data[k]/10;//调整
data[k]%=10;
}
}
}
}
printf("%d!=",num);
for(int j=digit;j>0;j--)
{
printf("%d",data[j]);
}
printf("\n");
return 0;
}