大数处理 _______整数乘法_________1042_____________________________

//最恶心人的大数问题...我怕要让你看到我更恶心!!!!!!!!!!!!!!!
#include<stdio.h>
#include<string.h>
int i,j,m,n,b,c,a[11111];
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        memset(a,0,sizeof(a));
        m=0;
        a[0]=1;
        for(i=1;i<=n;i++)       //思想就是用两个for循环   第一个for循环  一个一个向下传送需要相乘的数字
        {
            for(j=0;j<=m;j++)//第二个for循环就是让一个数组单位之中储存一个小于100000的数字.(试试更大的数字)
            {
                a[j]=a[j]*i;   //在这里开始积攒直到积攒到不少于100000就去开辟一个新的数组小单元
                if(j>0&&a[j-1]>=10000)//   j>0是用来防止随机数捣鬼.....
                {
                    a[j]=a[j]+a[j-1]/10000; //  在开辟好新空间之后
                    a[j-1]=a[j-1]%10000;     //这一次  a[j]为0.  然后进入这个循环  开始进阶
                }                             //然后出去  进阶完成之后 其值一定小于10000.所以自动跳回
                if(a[m]>=10000)   //在这里  让m的值变大然后由上一个for循环开辟新空间
                    m++;
            }
        }
        printf("%d",a[m]);
        for(i=m-1;i>=0;i--)
        {
            printf("%04d",a[i]);  //因为是四位数 是一个 小单位.所以    如果是三个数的话,前面的一定是0所以控制一下格式
        }
        printf("\n");
    }
    return 0;
}

 

posted @ 2015-12-08 14:02  X-POWER  阅读(283)  评论(0编辑  收藏  举报