class Program
{
static int a = 10000, b, c = 3500, d, e, g;
static int[] f;
static void Main()
{
f = new int[3501];
while (0 != b - c) f[b++] = a / 5;
d = 0;
g = c << 1;
while (0 != g)
{
b = c;
d += f[b] * a;
f[b--] = d % --g;
d = d / g--;
while (0 != b)
{
d = d * b + f[b] * a;
f[b--] = d % --g;
d = d / g--;
}
System.Console.Write(e + d / a);
c -= 14;
e = d % a;
d = 0;
g = c * 2;
}
}
}
这个可以用多线程实现 我以前写过,不过是VC写的。下面是核心代码 你修改成C#版本的即可
DWORD WINAPI ThreadFuncPi(LPVOID lParam){
CString str,str1;
int Count=-1;
int isfirst; //精确到7999位
long a=10; //缩放的倍数
long c=88000; //迭代的次数
long f[88001]; //中间的计算结果
long d; //内循环误差累计项
long e=0; //外循环误差累计项
long b, g; //分子 与 分母. k/(2k+1)
int i;
for(i=0;i
{ d=0;
g=(c*2+1)-2; // 分母部分
b=c; // 分子
while(1)
{ d*=b;
d+=f[b]*a;
f[b]=d%g; // 带分数的 分子部分
d/=g; // 带分数的 整数部分
g-=2;
b--;
if(b==0) break;
}
Sleep(10);
str.Format("%1d",e+d/a);
m_Show.ReplaceSel(str,FALSE);
if(isfirst){m_Show.ReplaceSel(".",FALSE); isfirst=0;}
str1.Format("%d",++Count);
SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_xs,str1);
//Count++;
//itoa(Count,ch,10);
//SetDlgItemText(IDC_xs,ch);
e=d%a;
c-=11; // 因为精度固定为800位,每输出1位后,相当于精度需求降低了1位,所以每次可以少算11项
// SetDlgItemText(IDC_xs,ch);
}
return 0;
}
我有这个歌...
(真的有1000位的歌词...)
指针 数组 STRING 我乱说