代码改变世界

一维数组的高级应用

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,商数,加到前一位数组中,余数保留。

 

代码
#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;
}