zoukankan      html  css  js  c++  java
  • 高精度模板

    高精度GCD

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    using namespace std;
    void init(int num[]){
    	char s[10005]={0};
    	scanf("%s",s);
    	num[0]=strlen(s);
    	for(int i=1;i<=num[0];i++){
    		num[i]=s[num[0]-i]-'0';
    	}
    }
    void print(int num[]){
    	for(int i=num[0];i>=1;i--){
    		printf("%d",num[i]);
    	}
    	printf("
    ");
    }
    int A[10005],B[10005],C[10005]={1,1},f[10]={1,2};
    int cmp(int a[],int b[]){
    	if(a[0]>b[0]) return 1;
    	if(a[0]<b[0]) return -1;
    	for(int i=a[0];i>=1;i--){
    		if(a[i]>b[i]) return 1;
    		if(a[i]<b[i]) return -1;
    	}
    	return 0;
    }
    void jianfa(int a[],int b[]){
    	for(int i=1;i<=a[0];i++){
    		a[i]-=b[i];
    		if(a[i]<0){
    			a[i]+=10;
    			a[i+1]--;
    		}
    	}
    	a[0]++;//注意
    	for(int i=a[0];i>=1;i--){
    		if(!a[i]) a[0]=i;
    		else break;
    	}
    	if(a[0]>=2) a[0]--;
    }
    void chengfa(int a[],int b[]){
    	int num[10005]={0};
    	memset(num,0,4*10005);
    	for(int i=1;i<=a[0];i++){
    		for(int j=1;j<=b[0];j++){
    			num[i+j-1]+=a[i]*b[j];
    		}
    	}
    	for(int i=1;i<=a[0]+b[0];i++){
    		if(num[i]>=10){
    			num[i+1]+=num[i]/10;
    			num[i]%=10;
    		}
    	}
    	num[0]=a[0]+b[0]+1;//注意
    	for(int i=a[0]+b[0];i>=2;i--){
    		if(!num[i]) num[0]=i;
    		else break;
    	}
    	num[0]--;
    	memset(a,0,sizeof(0));
    	memcpy(a,num,4*num[0]+4);
    }
    void chu2(int num[]){
    	for(int i=num[0];i>=1;i--){
    		if(num[i]&1&&i>=2) num[i-1]+=10;
    		num[i]/=2;
    		if(i==num[0]&&num[i]==0&&num[0]!=1) num[0]--;//注意
    	}
    	
    }
    void gcd(int a[],int b[],int c[]){	
    	if(cmp(a,b)<0){
    		swap(a,b);
    	}
    	while(!(b[0]==1&&b[1]==0)){
    		if((b[1]&1)&&(a[1]&1)){
    			jianfa(a,b);
    		}
    		else if(!(b[1]&1)&&(a[1]&1)){
    			chu2(b);
    		}
    		else if((b[1]&1)&&!(a[1]&1)){
    			chu2(a);
    		}
    		else if(!(b[1]&1)&&!(a[1]&1)){
    			chu2(a);chu2(b);
    			chengfa(c,f);
    		}
    		if(cmp(a,b)<0){
    			swap(a,b);
    		}
    	}
    	chengfa(c,a);
    }
    int main(){
    	freopen("in.txt","r",stdin);
    	init(A);init(B);
    	gcd(A,B,C);
    	print(C);
    	fclose(stdin);
    	return 0;
    }
    
    
  • 相关阅读:
    HDU_1711 Number Sequence(KMP)
    快速排序+归并排序
    贪心算法
    HDU_1496 Equations && POJ_1840 Eqs(Hash)
    POJ_1328 Radar Installation(贪心)
    HDU_1055 && POJ_2054 Color a Tree(贪心)
    HDU_1754 I Hate It (线段树)
    哈希(Hash)表学习笔记
    jQuery插件datepicker的使用详解
    json总结
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/7868292.html
Copyright © 2011-2022 走看看