大数乘法运算
2012-07-30 10:37 javaspring 阅读(240) 评论(0) 编辑 收藏 举报1、直接进行整型大数之间的乘法很容易导致数据存储溢出,可以采用数组存储计算得到的每一位
#include <stdio.h> #include <stdlib.h> int main() { int n; int a[100], k=0, i, j; //定义相关变量,数组 while(1) //自行判断决定循环执行次数 { if(n==0) break; printf("请输入要求的阶乘的数、输入0结束:"); scanf("%d",&n); //输入阶乘数n printf(" %d!=",n); for(i=0; i<100; i++) //运用循环语句对数组各元素进行初始化为0 a[i]=0; a[0]=1; //对数组首元素初始化为1 for(i=2;i<=n;i++) { for(j=0;j<=k;j++) a[j]=a[j]*i; //相邻关系的数相乘 k=k+2; for(j=0;j<k;j++) if(a[j]>9) //限制范围,以进位为基准 { a[j+1]=a[j+1]+a[j]/10; //按阶乘要求改变符合条件的数组元素的值 a[j]%=10; //控制a[j]的数值范围,避免过大,影响循环条件语句的再次执行 } while(a[k]==0) //判断数组元素是否为0并控制K的范围 k--; } for(i=k; i>=0; i--)//利用循环语句,逐个将对应储存阶乘结果的数组元素输出 printf("%d",a[i]); printf("\n"); } return 0; }