还有一个是8x8的国际象棋棋盘,把一个棋子从左下角1,1的位置移到右上角8,8,每次都只能向右或向上移一格,求有多少种方法可以移到右上角
谢谢各位先
在网上看到一个求10000!的c语言代码, 算法正确, 用C#改写一下, 大家一起研究.
程序运行需要等待一小段时间...
private void button2_Click(object sender, System.EventArgs e)
{
// COUNT必须为10的n次幂(0 =< n < 9)
const long COUNT = 10000;
long[] array = new long[COUNT];
// 初始化数组
array[0] = 1;
for (long i = 1; i < COUNT; i++)
{
array[i] = 0;
}
long k = 1; // k 是一个计数器
// 计算COUNT - 1的阶乘保存在数组中
for(long i = 1;i < COUNT; i++)
{
for (long j = 0; j < k; j++)
{
array[j] = array[j] * i;
}
// 进位(不是满十进一, 而是满COUNT进一)
for (long j = 0; j < k; j++)
{
if (array[j] / COUNT >= 1)
{
array[j + 1] += array[j] / COUNT;
array[j] %= COUNT;
if(j == k-1)
{
k++;
break;
}
}
}
}
// 输出计算结果
System.Text.StringBuilder sb = new System.Text.StringBuilder();
// 输出COUNT的倍数
for (long m = k - 1; m >= 0; m--)
{
sb.Append(array[m].ToString());
}
// 补0, 相当于最后乘以COUNT
for (int n = 0; n < Math.Log10(COUNT); n++)
{
sb.Append("0");
}
richTextBox1.Visible = false;
richTextBox1.Text = sb.ToString();
richTextBox1.Visible = true;
}