解决方案 »
- 创建不规则窗体中的一个算法问题!
- 存储过各中写SQL语 在线等待
- c#中做桌面开发不用dataGridView的话 如何取得select的数据
- 问个小问题,给你个高分。有关调试
- 【99-在线等】顶者有分 ODP.NET 访问TimesTen 能够连接上 但是报异常“不支持该功能”!
- SendKeys.Send("^c");的一个问题
- msde 在打包程序中如何自动附加以有数据库
- 请教Infragistics的WinGrid控件关于MulitColumn_DropDown
- 解析xml文件的问题...希望大家帮看看
- Socket通讯问题,麻烦各位大虾们帮忙解答一下!
- c# teechart 坐标轴控制问题
- c#执行sql提示ORA-01406: 提取的列值被截断 plsql正常
#include "math.h"//
#include "stdlib.h"//
char *FactorialLN(int n){
int i,j,k,len;
char *pa,*pb,*ptmp;
double dec=0;
for(n++,i=2;i<n;dec+=log10(i++));
len=(int)dec+2;
pa=(char *)malloc(len);
pb=(char *)malloc(len);
if(!pb || !pa){
printf("Application memory failure...");
exit(0);
}
for(i=0;i<len;*(pa+i)=*(pb+i++)=0);
for(i-=2,j=--n;j;*(pb+i--)=j%10,j/=10);
len--;
i++;
while(--n){
for(k=0;k<n;k++){
for(j=i;j<len;*(pa+j)+=*(pb+j++));
for(j=len-1;j>i;j--)
if(*(pa+j)>9){
*(pa+j)-=10;
(*(pa+j-1))++;
}
if(*(pa+i)>9){
*(pa+i--)-=10;
(*(pa+i))++;
}
}
ptmp=pa;
pa=pb;
pb=ptmp;
for(k=0;k<len;*(pa+k++)=0);
}
free(pa);
for(i=0;i<len;*(pb+i++)+='0');
return pb;
}
void main(void){
int n;
char *p;
printf("Please enter an integer.\nn=");
scanf("%d",&n);
printf("%d! = %s.",n,p=FactorialLN(n));
free(p);
printf("\n");
}
{
if (n < 0) { throw new ArgumentOutOfRangeException("n必须为非负数。"); } if (n == 0 || n == 1) { return new uint[] { 1 }; }
// 数组的最大长度
const int MaxLength = 100000;
uint[] array = new uint[MaxLength];
// 1! = 1
array[0] = 1;
int i = 0;
int j = 0;
// valid为当前阶乘值的位数(如5! = 120,此时valid = 3)
int valid = 1; for (i = 2; i <= n; i++)
{
long carry = 0;
for (j = 0; j < valid; j++)
{
long multipleResult = array[j] * i + carry;
// 计算当前位的数值
array[j] = (uint)(multipleResult % 10);
// 计算进到高位的数值
carry = multipleResult / 10;
}
// 为更高位赋值
while (carry != 0)
{
array[valid++] = (uint)(carry % 10);
carry /= 10;
}
}
// 截取有效元素
uint[] result = new uint[valid];
Array.Copy(array, result, valid);
return result;
}
static void Main(string[] args)
{
uint[] arr = CalculateLargeNumber(100);
string str = "";
for (int i = arr.Length-1; i >=0 ; i--)
{
str += arr[i].ToString();
}
Console.WriteLine(str);
Console.ReadKey();
}
int[] result = new int[200];
result[0] = 1;
int intPosition = 0; for (int i = 2; i <= 100; i++)
{
int intNext = 0;
for (int j = 0; j <= intPosition; j++)
{ int temp = result[j] * i + intNext;
result[j] = temp % 10;
intNext = temp / 10; if (j == intPosition && temp >= 10)
{
intPosition += 1;
}
}
}
bool blnFlag = false;
StringBuilder strResult = new StringBuilder();
for (int i = 199; i >= 0; i--)
{
if (result[i] == 0 && !blnFlag)
{
continue;
}
blnFlag = true;
strResult.Append(result[i].ToString());
Console.Write(result[i].ToString());
}
Console.WriteLine(strResult.ToString());
Console.ReadKey();