大数乘法(加法)运算

来源:互联网 发布:共享单车大数据 编辑:程序博客网 时间:2024/05/16 18:57

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);       //输入阶乘数nprintf(" %d!=",n);for(i=0; i<100; i++)  //运用循环语句对数组各元素进行初始化为0a[i]=0;a[0]=1;   //对数组首元素初始化为1for(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;}

2、大数加法运算,道理是一样的,见下面代码:

#include <stdio.h>#include <iostream.h>#include <string.h>//从s连续相加到n结束void Add(int s,int n){int a[100]; //用数组的每一个元素存放计算结果的每一位memset(a,0,100);int k=0,max=0; //max记录数组a中的有效位for (int i=s;i<=n;i++)  //待相加的数值,从s到n{a[0]+=i;k=0; //清零for (int j=0;j<100;j++){while(a[j]>=10){a[j+1]=a[j+1]+a[j]/10; //超过9的需要进位    a[j]=a[j]%10;k++;}}if (k>max)  //更新计算结果最大位数{max=k;}}//输出结果for (i=max;i>=0;i--){cout<<a[i];}cout<<endl;}int main(){Add(100,1000);return 0;}

 

原创粉丝点击