大数运算
发布时间:2020-12-14 04:21:22 所属栏目:大数据 来源:网络整理
导读:在计算中,如果运算数值超过自带整型的范围,则会溢出。因此在这类计算中,通常把数存放在数组中。进行运算。 1、大数阶乘(相乘) 在N!中的计算中首先先计数出N!的位数。设位数为m。则 pow(10,m-1)=N!=pow(10,m)-1pow(10,m)。 m-1=log10(N)m m=log10(2)+log
在计算中,如果运算数值超过自带整型的范围,则会溢出。因此在这类计算中,通常把数存放在数组中。进行运算。 1、大数阶乘(相乘) 在N!中的计算中首先先计数出N!的位数。设位数为m。则 pow(10,m-1)<=N!<=pow(10,m)-1<pow(10,m)。 m-1<=log10(N)<m m=log10(2)+log10(3)...........+log10(N)+1 贴上计算代码(大数相乘类似) 1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 6 typedef long long ll; 7 int a[500000]; 8 9 void reset(int m){ 10 for(int i=0;i<=m;i++) 11 a[i]=0; 12 } 13 14 void countn(int num,ll t){ 15 int k=0; 16 a[0]=1; 17 for(ll i=2;i<=t;i++) 18 for(int j=0;j<num;j++){ 19 a[j]*=i; 20 a[j]+=k; 21 k=a[j]/10; 22 a[j]%=10; 23 } 24 for(int i=num-1;i>=0;i--) 25 cout<<a[i]; 26 cout<<endl; 27 28 } 29 30 int main(){ 31 ll t,num=1; 32 double m; 33 while(cin>>t){ 34 m=0; 35 for(int i=2;i<=t;i++) 36 m+=log10(i); 37 num=(int)m+1; 38 reset(num); 39 countn(num,t); 40 } 41 42 43 } 2、大数相加(相减类似) 首先找出俩个数最大的那个,对齐,从个位依次相加。逢10进一,依次类推。 3、大数相除 一般大数相除中,常见的思路是 例如8888/300 300*10=3000 3000*2=6000 依次类推,则算出商为29,余数为188 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |