• Luogu P2152[SDOI 2009]Super GCD


    题目
    没有任何思维含量,但是压位高精能搞一天
    为了避免这种情况,是时候发挥python水高精的作用了

    本人代码

    a=(int)(input())
    b=(int)(input())
    c=a%b
    while c!=0:
    	a=b
    	b=c
    	c=a%b
    print(b)
    

    来自Blueqwq

    import fractions
    print(fractions.gcd(int(input()),int(input())))
    

    来自XiEn1847

    Ruby真短

    #!/usr/bin/ruby
    puts gets.to_i.gcd(gets.to_i)
    

    来自wsy_jim

    认真写压位高精的好孩子

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=10010,width=8,B=100000000;
    
    char readin[1255*8]={};
    
    struct bigint{
        int len;
        int a[N];
    
        void init(){memset(a,0,sizeof a);len=0;}
        
        bigint operator = (ll num){init();for(;num>0;){len++;a[len]=num%B;num/=B;}return *this;}
    
        bigint operator = (const char *num){
            init();
            len=(strlen(num)+width-1)/width;
            for(int i=strlen(num)-1,t=0,w;i>=0;i--,w*=10){
                if((strlen(num)-i-1)%width==0) w=1,t++;
                a[t]+=w*(num[i]-48);
            }
            return *this;
        }
    
        bool operator < (const bigint &b)const{
            if(b.len!=len) return len<b.len;
            for(int i=b.len;i>=1;i--) if(b.a[i]!=a[i]) return a[i]<b.a[i];
        	return 0;
    	}
    
        bigint operator - (const bigint &b){
            bigint c;
            c.init();
            c.len=len;
            for(int i=1;i<=len;i++){
            	c.a[i]+=a[i]-b.a[i];
            	if(c.a[i]<0){c.a[i]+=B;c.a[i+1]--;}
            }
            for(;c.a[c.len]==0&&c.len>0;c.len--);
            return c;
        }
    
        bool operator == (const bigint &b){
            return !(b<*this)&&!(*this<b);
        }
    
        void mul2(){
        	for(int i=1;i<=len;i++) a[i]*=2;len+=5;
        	for(int i=1;i<=len;i++){
        		a[i+1]+=a[i]/B;
        		a[i]%=B;
        	}
        	for(;a[len]==0&&len>0;len--);
        }
        
        void div2(){
        	len+=5;
        	for(int i=len;i>=1;i--){
        		if(a[i]&1) a[i-1]+=B;
        		a[i]/=2;
        	}
        	for(;a[len]==0&&len>0;len--);
        }
        
        bool check_jo(){
        	if(len==0) return 1;
        	else return a[1]%2==0;
        }
        
        void read(){
        	memset(readin,0,sizeof readin);
    		scanf("%s",readin);
    		*this=readin;
        }
        
        void print(){
        	if(len==0) printf("0");
        	else{
        		printf("%d",a[len]);
        		for(int i=len-1;i>=1;i--) printf("%08d",a[i]);
        	}
        } 
        
    }a,b,ans;
    
    int cnt=0;
    
    int main(){
    	
    	a.init();b.init();ans.init();
    	a.read();b.read();
    	
    	while(!(a==b)){
    		if(a<b) swap(a,b);
    		if(a.check_jo()&&b.check_jo()) a.div2(),b.div2(),cnt++;
    		else if(a.check_jo()&&!b.check_jo()) a.div2();
    		else if(!a.check_jo()&&b.check_jo()) b.div2();
    		else if(!a.check_jo()&&!b.check_jo()) a=a-b;
    	}
    	ans=a;
    	
    	while(cnt--){
    		ans.mul2();
    	}
    	
    	ans.print();
    	
    	return 0;
    }
    
  • 相关阅读:
    js代码的执行顺序及运算
    javascript讲解
    浏览器的差距
    标准流
    下拉列表
    单位
    滚动标签
    接着说一些有关排版的一些东西
    关于处理浏览器的兼容问题
    关于排版的技巧
  • 原文地址:https://www.cnblogs.com/DReamLion/p/14747301.html
Copyright © 2020-2023  润新知