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;
}
原文地址:https://www.cnblogs.com/DReamLion/p/14747301.html