(一)大数阶乘
#include<stdio.h>
#include<string.h>
int a[20000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,k;
int c;
memset(a,0,sizeof(a));
a[0]=1;
for(i=2;i<=n;i++)
{
c=0;
for(j=0;j<=20000;j++)
{
k=a[j]*i+c;
c=k/10;
a[j]=k%10;
}
}
for(i=20000;a[i]==0;i--);
for(;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}
(二)大数加法
别别
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int max(int x,int y)
{
int z;
z=x>y?x:y;//比较两个值大小
return z;
}
int main()
{
int lena,lenb,i,n,t=0,z,numa[1100],numb[1100];
char a[1100],b[1100];
scanf("%d",&n);
while(n--)
{
memset(numa,0,sizeof(numa));
memset(numb,0,sizeof(numb));//int数组清零
scanf("%s%s",a,b);
lena=strlen(a);
lenb=strlen(b);
for(i=0;i<lena;i++)
numa[lena-1-i]=a[i]-'0';
for(i=0;i<lenb;i++)
numb[lenb-1-i]=b[i]-'0';
z=max(lena,lenb);
for(i=0;i<z;i++)//此处i值的范围就是两个字符串长度的最大者
{
numa[i]=numa[i]+numb[i];
if(numa[i]>9)//处理相加大于十的情况
{
numa[i]=numa[i]-10;
numa[i+1]++;
}
}
t++;
printf("Case %d:\n",t);
printf("%s + %s = ",a,b);
if(numa[z]==0)// 判断数组第z位是否为零
{
for(i=z-1;i>=0;i--)
printf("%d",numa[i]);
printf("\n");
}
else
{
for(i=z;i>=0;i--)
printf("%d",numa[i]);
printf("\n");
}
if(n!=0)//每一次的输入遇上一次的输出之间空一行 ,n=0是输出的是最后一组数据,即不用空出一行
printf("\n");
}
return 0;
}
自自
#include<stdio.h>
#include<string.h>
int main()
{
int ia[1010];
int ib[1010];
char a[1010];
char b[1010];
int i,j=0,m,n,la,lb,sum;
scanf("%d",&n);
m=n;
while(n--)
{
j++;
memset(ia,0,sizeof(ia));
memset(ib,0,sizeof(ib));
scanf("%s %s",a,b);
la=strlen(a);
lb=strlen(b);
for(i=0;i<la;i++)
ia[la-1-i]=a[i]-'0';
for(i=0;i<lb;i++)
ib[lb-1-i]=b[i]-'0';
if(la<lb)
la=lb;
for(i=0;i<la;i++)
{
sum=ia[i]+ib[i];
if(sum>9)
{
ia[i]=sum-10;
ia[i+1]++;
}
else
ia[i]=sum;
}
if(j<m)
{
if(ia[la]==0)
{
printf("Case %d:\n",j);
printf("%s + %s = ",a,b);
for(i=la-1;i>=0;i--)
printf("%d",ia[i]);
printf("\n\n");
}
else
{
printf("Case %d:\n",j);
printf("%s + %s = ",a,b);
for(i=la;i>=0;i--)
printf("%d",ia[i]);
printf("\n\n");
}
}
else //j=m时
{
if(ia[la]==0)
{
printf("Case %d:\n",j);
printf("%s + %s = ",a,b);
for(i=la-1;i>=0;i--)
printf("%d",ia[i]);
printf("\n");
}
else
{
printf("Case %d:\n",j);
printf("%s + %s = ",a,b);
for(i=la;i>=0;i--)
printf("%d",ia[i]);
printf("\n");
}
}
}
return 0;
}
(三)大数斐波纳契数列
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n,p;
int v,b;
char a[1010][1010];
memset(a,'0',sizeof(a));
a[1][0]='1';
a[2][0]='1';
for(i=3;i<=1000;i++)
{
v=0,b=0;
for(j=0;j<1000;j++)
{
v=a[i-1][j]-'0'+a[i-2][j]-'0'+b;
a[i][j]=(v%10)+'0';
b=v/10;
}
}
scanf("%d",&n);
while(n--)
{
scanf("%d",&p);
for(i=1000;i>=0;i--)
{
if(a[p][i]!='0')
break;
}
for(j=i;j>=0;j--)
{
printf("%c",a[p][j]);
}
printf("\n");
}
return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif;">(四)大数取余</span>
</pre><p><pre name="code" class="cpp"><pre name="code" class="cpp"><pre name="code" class="cpp">#include<cstdio>
#include<cstring>
char a[10001];
int main()
{
int b,n,m;
while(scanf("%s",&a)!=EOF)
{
scanf("%d",&b);
int n=strlen(a);
int yu=0;
for(int i=0;i<n;i++ )
{
yu=yu*10;
yu=yu+a[i]-'0';
yu=yu%b;
}
printf("%d\n",yu);
}
return 0;
}