解决方案 »
- C# datatable 数据验证
- .。。。。。WinForm中实现单实例,求教思路。。。。。。。。。。。。。。。。。
- 问一下做.net程序员的应届毕业生薪酬问题
- 计算器的编写,出了点小问题
- 怎样实现两个panel,中间有一条线连接,并且可以锁定其中一个panel,当拖动另外一个时,直线的长短和终点跟随变化?
- 求问一个进销存的业务问题,做过的请帮帮忙
- 求教:在C/S结构中,怎样绑定DataGrid?谢谢!
- 关于窗体的问题
- 引用Excel9.0 lib做EXCEL操作,进行单元格赋值“1/6”的字符串的,导出Excel自动转成"1月6日"日期格式了,请问怎么设单元格为文本格式呢?附
- 使用DrawReversibleFrame实现拉框的功能?
- 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();