大数加法
void add(char a[],char b[],char s[])//a被加数,b加数,s和
{
int i,j,k,up,x,y,z,l;
char *c;
if (strlen(a)>strlen(b))
l=strlen(a)+2;
else l=strlen(b)+2;
c=(char *) malloc(l*sizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x='0'; else x=a[i];
if(j<0) y='0'; else y=b[j];
z=x-'0'+y-'0';
if(up) z+=1;
if(z>9) {up=1;z%=10;}
else up=0;
c[k++]=z+'0';
i--;j--;
}
if(up) c[k++]='1';
i=0;
c[k]='\0';
for(k-=1;k>=0;k--)
s[i++]=c[k];
s[i]='\0';
}
大数阶乘
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std ;
int a[500000] ;
int main()
{
int n ;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a)) ;
a[0] = 1 ;
for(int i=2 ;i<=n; i++)
{
int c = 0 ;
for(int j = 0 ;j<50000 ;j++)
{
int s = a[j]*i+c ;
a[j] = s%10 ;
c = s/10 ;
}
}
int i ;
for(i = 49999 ;i>=0 ;i--)
{
if(a[i])
break ;
}
for(int j = i ;j>=0 ;j--)
{
printf("%d",a[j]) ;
}
printf("\n") ;
}
return 0 ;
}