思想:首先声名一个大小为40的整数型数组,用来存放计算结果。首先将数组中的数据初始化为0,再令第一位为1,数据的位数为1。
源码:
#include <stdio.h>
#include <windows.h> //调用system函数,防止vs2012一闪而过
void main(void)
{
int Data[40]; /* 存储40位数的整数数组 */
int Digit; /* 数据实际位数变量 */
int i,j,r,k; /* 循环计数变量 */
int N; /* 用户输入值 */
for (i=1;i<40;i++) /* 将数组初始值设为0 */
Data[i]=0;
Data[0]=1; /* 设第0位数数组为1,该位废弃了*/
Data[1]=1; /* 设第1位数数组为1 */
Digit=1; /* 设数据位数为1 */
printf("Enter a number what you want to calculate : ");
scanf("%d",&N); /* 读取用户欲求的N值 */
for (i=1;i<N+1;i++) //依次计算1,2..N的阶层
{
for (j=1;j<Digit+1;j++) //对数组每个单元进行计算
Data[j]*=i;
for (j=1;j<Digit+1;j++) //对每个单元与10进行比较,判断是否要进位
{
if (Data[j]>10)
{
Data[j+1] += Data[j]/10;
Data[j]=Data[j]%10;
}
}
if (Data[Digit+1]>0) //若Digit+1单元非零,则数据位数增加
Digit++;
printf("%d! = ",i);
for (k=Digit;k>0;k--) /* 输出数组中的内容*/
printf("%d",Data[k]);
printf("\n");
}
system("PAUSE");
}
其实以上程序只能存39位计算数据,因为data[0]废弃了,这是为了计算方便。我们可以把数组长度改为41就能存放40位的运算结果了。
以下是不废弃data[0]的源码:
#include <stdio.h>
#include <windows.h> //调用system函数,防止vs2012一闪而过
void main(void)
{
int Data[40]; /* 存储40位数的整数数组 */
int Digit; /* 数据实际位数变量 */
int i,j,r,k; /* 循环计数变量 */
int N; /* 用户输入值 */
for (i=0;i<40;i++) /* 将数组初始值设为0 */
Data[i]=0;
Data[0]=1; /* 设第0位数数组为1,该位废弃了*/
Digit=1; /* 设数据位数为1 */
printf("Enter a number what you want to calculate : ");
scanf("%d",&N); /* 读取用户欲求的N值 */
for (i=1;i<N+1;i++) //依次计算1,2..N的阶层
{
for (j=1;j<Digit+1;j++) //对数组每个单元进行计算
Data[j-1]*=i;
for (j=1;j<Digit+1;j++) //对每个单元与10进行比较,判断是否要进位
{
if (Data[j-1]>10)
{
Data[j] += Data[j-1]/10;
Data[j-1]=Data[j-1]%10;
}
}
if (Data[Digit]>0) //Data[Digit]表示第Digit+1位
Digit++;
printf("%d! = ",i);
for (k=Digit;k>0;k--) /* 输出数组中的内容*/
printf("%d",Data[k-1]);
printf("\n");
}
system("PAUSE");
}