zoukankan      html  css  js  c++  java
  • NOIP1998普及组

    1222 -- 【NOIP1998普及组T2】阶乘求和

    用高精度计算出S=1!+2!+3!+…+n! (n≤50)
    其中“!”表示阶乘,例如:5!=5*4*3*2*1。

    这么简单的嘛

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<stack>
    #include<cstdio>
    #include<queue>
    using namespace std;
    int n,len,x;
    int a[50001];
    int b[50001];
    
    //这道题卡了很久,一开始把加的过程写在了循环里面,不知道为什么错了 
    void jiecheng(int s){
    	memset(a,0,sizeof(a));
    	a[1]=1;
    	for(int i=1;i<=s;i++){
    		x=0;
    		for(int j=1;j<=len;j++){
    			a[j]=a[j]*i+x;
    			x=a[j]/10;
    			a[j]%=10;
    			if(x>0&&j>=len) len++; 
    		}
    	}
    }
    void  jia(){
    	for(int j=1;j<=len;j++){
    		b[j]+=a[j];
    		b[j+1]+=b[j]/10;
    		b[j]%=10;
    		if(b[j+1]>0&&j==len) len++; 
    	}
    }
    int main(){
    	cin>>n;
    	len=1;
    	memset(b,0,sizeof(b));
    	for(int i=1;i<=n;i++){
    		jiecheng(i);
    		jia();
    	}
    	for(int i=len;i>=1;i--) cout<<b[i];
    return 0;
    }
    

      

    1223 -- 【NOIP1998普及组T3】2的幂次方

    都是细节的题呀,真的考验基础算法的应用和细节

    两种做法

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<stack>
    #include<cstdio>
    #include<queue>
    using namespace std;
    int a[20];
    int get(int x){
    	if(x==0){
    		cout<<"0";
    		return 0;
    	}
    	if(x==2){
    		cout<<"2";
    		return 0;
    }
    	while(1){
    	int i;
    	for(i=17;a[i]>x;i--) ;//寻找小于x的第一个下标i
    	if(a[i]!=2) {
    		cout<<"2(";
    		get(i);
    		cout<<")";
    	}
    	else cout<<"2";
    	if(x-a[i]) {
    		cout<<"+";
    		x=x-a[i];//上面的处理完了后进行这一步,因为有while 
    	}
    	else return 0;
    }
    }
    //这个为另外一种做法:递归 
    void calculate(int n,int step)
    {
        if(n==0)
            return;
        calculate(n/2,step+1);
        if(n%2)
        {
            if(n/2)
                cout<<"+";
            if(step==1)
                cout<<"2";
            else
            {
                cout<<"2(";
                if(step==0)
                    cout<<"0";
                else
                    calculate(step,0);
                cout<<")";
            }
        }
    }
    
    int main(){
    	a[0]=1;
    	for(int i=1;i<=20;i++) a[i]=a[i-1]*2;
    	int n;
    	cin>>n;
    	get(n);
    return 0;
    }
    

      

  • 相关阅读:
    html5 自定义属性data-*
    企业微信接口授权
    js对象---字符串
    谈谈html5新增的元素及其他功能
    模拟缓存
    jdbc数据库连接
    面向对象的理解
    最简单的Spring+SpringMVC+Mybatis的整合
    EF报错 附加类型model失败
    c# Web服务远程“调用”调试
  • 原文地址:https://www.cnblogs.com/shirlybaby/p/12733900.html
Copyright © 2011-2022 走看看