• 高精度进阶


    目录

    1. 计算(2^N)
    2. 大整数因子
    3. 计算(n!)
    4. 阶乘和

    1

    OPJ1.6.12 计算(2^N)

    描述

    任意给定一个正整数(N(Nle 100)),计算2的n次方的值。

    输入

    输入一个正整数(N)

    输出

    输出(2^N)的值。

    样例输入

    5

    样例输出

    32

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    int ans[1005]={0};
    void db2(int c[]){
    	for(int i=1;i<=c[0];i++){
    		c[i]*=2;
    	}
    	for(int i=1;i<=c[0];i++){
    		if(c[i]>=10){
    			c[i+1]+=(c[i]/10);
    			c[i]%=10;
    		}
    	}
    	if(c[c[0]+1]) c[0]++;
    }
    void prta(int c[]){
    	for(int i=c[0];i>=1;i--){
    		printf("%d",c[i]);
    	}
    }
    int main( ){
    	ans[1]=1;
    	ans[0]=1;
    	int n;
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		db2(ans);
    	}
    	prta(ans);
    	return 0;
    }
    

    2

    OPJ1.6.13:大整数的因子

    描述

    已知正整数(k)满足(2le kle 9),现给出长度最大为30位的十进制非负整数(c),求所有能整除(c)(k)

    输入

    一个非负整数(c)(P_c)表示(c)的位数,(P_cle 30)

    输出

    若存在满足 (c%k=0)(k),从小到大输出所有这样的(k),相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。

    样例输入

    30

    样例输出

    2 3 5 6

    #include<bits/stdc++.h>
    using namespace std;
    char str[32];
    int len,k;
    bool isTrue(int k){
    	int num1 = 0, num2=0;
    	for(int i=0;i<len;i++){
    		num1=str[i]-'0'+num2*10;
    		num2=num1%k;
    	}
    	return num2 == 0;
    }
    int main(){
    	scanf("%s",str);
    	len = strlen(str);
    	bool ok = false,first = true;
    	for(k=2;k<=9;k++){
    		if(isTrue(k)){
    			ok=true;
    			if(first){
    				printf("%d",k);
    				first = false;
    			}else{
    				printf(" %d",k);
    			}
    		}
    	}
    	if(!ok) puts("none");
    	else putchar('
    ');
    	return 0;
    }
    

    3

    1.6.14:(n!)

    描述

    (10000)以内(n)的阶乘。

    输入

    只有一行输入,整数(n(0le nle 10000))

    输出

    一行,即(n!)的值。

    样例输入

    100

    样例输出

    93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

    #include<bits/stdc++.h>
    using namespace std;
    int n,a,fac[50000],ans[50000]={1,1};
    int main(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=ans[0];j++){
    			ans[j]=ans[j]*i+fac[j];
    			fac[j]=0;
    			if(ans[j]>=10){
    				fac[j+1]+=ans[j]/10;
    				ans[j]%=10;
    				if(j==ans[0]) ++ans[0];
    			}
    		}
    	}
    	for(int i=ans[0];i>0;i--) printf("%d",ans[i]);
    	putchar('
    ');
    	return 0;
    }
    

    4

    OPJ1.6.15 阶乘和

    描述

    用高精度计算出(S=1!+2!+3!+…+n!(nle 50))

    其中“!”表示阶乘,例如:(5!=5 imes 4 imes 3 imes 2 imes 1)

    输入正整数(N),输出计算结果(S)

    输入

    一个正整数(N)

    输出

    计算结果(S)

    样例输入

    5

    样例输出

    153

    来源

    NOIP1998复赛 普及组 第二题

    #include<bits/stdc++.h>
    using namespace std;
    int a[10001]={1};
    int ans[100001]={0};
    char n[1001];
    int en[1001];
    int lans=1;
    int la=1;
    int x;
    int main()
    {
        int n;
        cin>>n;
        int x=0;
        for(int i=1;i<=n;i++)
        {
            memset(a,0,sizeof(a));
            a[0]=1;
            for(int k=1;k<=i;k++)
            {
                for(int j=0;j<la;j++)
                {
                    a[j]=a[j]*k+x;
                    x=a[j]/10;
                    if(x>0&&j==la-1)
                        la++;
                    a[j]=a[j]%10;
                }
            }
            int l=0;
            x=0;
            while(l<=la||l<=lans) {
                ans[l]=ans[l]+a[l]+x;
                x=ans[l]/10;
                if(x>0)lans++;
                ans[l]=ans[l]%10;
                l++;
            }
        }
        int flag=0;
        for(int i=lans;i>=0;i--){
            if(ans[i]==0&&flag==0) continue;
            else flag=1;
            cout<<ans[i];
        }
        return 0;
    }
    
    要做就做南波万
  • 相关阅读:
    [Drupal] .htaccess issue
    [Drupal] 404 page didn't render other blocks.
    [Drupal] How to add the catcha to the webform
    [Javascript] Javascript如何定义函数参数的默认值
    [MySQL] #1153 Got a packet bigger than 'max_allowed_packet' bytes
    [Drupal] How to change the content from English to language Language neutral
    [Javascript] How to enlarge and small the font
    [Drupal] My method of using ajax in Drupal
    [Drupal] Submit and redirect back to the modify page
    [Drupal] Creating Checkboxes, Radio Buttons, or Select Lists
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/12000541.html
Copyright © 2020-2023  润新知