大数处理 _______整数乘法_________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; }