大数阶乘(C语言实现)

本来java里面会有大数类比较容易实现这些大数的运算,但是用c语言就要用到一些转化了,一下附上源代码
#include <stdio.h>
#include <string.h>

int main()
{
	char a[50], b[50];
	
	scanf("%s %s", a, b);
	int n1 = strlen(a), n2 = strlen(b);
	int sum[100] = {0};
	int d = 0, n, k;
	
	for(int i = 0, p = n1 - 1; i < n1; ++i, --p)
	{
		for(int j = 0, q = n2 - 1; j < n2; ++j, --q)   
		{
			k = i + j;
			int c = sum[k] + (a[p] - 48) * (b[q] - 48) + d;
			sum[k] = c % 10;
			d = c / 10;
		}
		
		while(d > 0)
		{
			++k;
			sum[k] = sum[k] + d % 10;
			d /= 10;
		}
		
		n = k;
	}
	
	for(int i = n; i >= 0; --i)
	{
		printf("%d", sum[i]);
	}
	printf("\n");
	
	return 0;
}


#include<stdio.h> 
#include<string.h>
int a[1000001];  
int main()  
{       
    int n;  
    while (~scanf("%d",&n))
    {
    	 int len=1;
    	 a[0]=1;//定义a[0]=1;
     	 for(int i=2;i<=n;i++)  
		 {  
          int b=0;  
          for(int j=1;j<=len;++j)  
		  {  
             int t=a[j-1]*i+b; //注意是a[j-1]
             a[j-1]=t%10;  
             b=t/10;  
             /*if(j==len&&b!=0)  
                 len++;  */
		  }  
         while (b)
		 {
        	len++;
        	a[len-1]=b%10;
        	b/=10;
		 }
     }      
    for(i=len;i>0;--i)  
        printf("%d",a[i-1]);  
    printf("\n"); 
    }
    return 0;
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值