加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数运算

发布时间: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 }
View Code

2、大数相加(相减类似)

  首先找出俩个数最大的那个,对齐,从个位依次相加。逢10进一,依次类推。

3、大数相除

  一般大数相除中,常见的思路是

  例如8888/300

  300*10=3000

  3000*2=6000

  依次类推,则算出商为29,余数为188

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读