一维数组的高级应用
2010-03-16 22:13 youthjiang 阅读(312) 评论(0) 编辑 收藏 举报我们知道,如果32bit的机器int类型,占用4个字节,表示的数据范围是-32767~32768,但是如果遇到超出该范围的数据,我们该如何处理呢?
例:设计一个容纳40位数的求n!的程序。
解题思路:
1.定义一个大小为40的数组,负责存储每一位数的数据,变量Digit位计算位数的变量,i,j,r,k为循环中使用的计数变量。
2. 第一位的数值为1,位数也为1。
3. 获得每一个值,存在数组中,循环处理每个数组中超过10的数:数值超过10,原来的数除以10,商数,加到前一位数组中,余数保留。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int Data[40]; /*Store the 40 bit data*/
int Digit; /*var for digit*/
int i,j,r,k; /*var for count*/
int N;
for(i=1; i<41; i++)
Data[i]=0;
Data[0]=1;
Data[1]=1;
Digit =1;
printf("Please Enter a number what you want to calculus:");
scanf("%d",&N);
for(i=1; i<N+1; i++)
{
for(j=1; j<Digit+1; j++)
{
Data[j]*=i;
}
for(j=1; j<Digit+1; j++)
{
if(Data[j]>10)
{
for(r=1; r<Digit+1; r++)
{
if(Data[Digit]>10)
{
Digit++;
}
Data[r+1]+=Data[r]/10;
Data[r]=Data[r]%10;
}
}
}
printf("%d!=",i);
for(k=Digit;k>0;k--)
{
printf("%d",Data[k]);
}
printf("\n");
}
system("PAUSE");
return 0;
}
#include <stdlib.h>
int main(int argc, char *argv[])
{
int Data[40]; /*Store the 40 bit data*/
int Digit; /*var for digit*/
int i,j,r,k; /*var for count*/
int N;
for(i=1; i<41; i++)
Data[i]=0;
Data[0]=1;
Data[1]=1;
Digit =1;
printf("Please Enter a number what you want to calculus:");
scanf("%d",&N);
for(i=1; i<N+1; i++)
{
for(j=1; j<Digit+1; j++)
{
Data[j]*=i;
}
for(j=1; j<Digit+1; j++)
{
if(Data[j]>10)
{
for(r=1; r<Digit+1; r++)
{
if(Data[Digit]>10)
{
Digit++;
}
Data[r+1]+=Data[r]/10;
Data[r]=Data[r]%10;
}
}
}
printf("%d!=",i);
for(k=Digit;k>0;k--)
{
printf("%d",Data[k]);
}
printf("\n");
}
system("PAUSE");
return 0;
}