P2152 [SDOI2009]SuperGCD

在这里插入图片描述
在这里插入图片描述
九位运算一次

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i,a,b) for(int i=(a);i<(b);i++)
#define _for(i,a,b) for(int i=(a);i<=(b);i++)
using namespace std;
const int MAXN=1200;
const int base=1e9;
struct bignum{
	int len,s[MAXN];
	bignum(){
		len=0;
		memset(s,0,sizeof(s));
	}
}; 
bignum operator - (bignum a,const bignum &b)
{
	for(int i=a.len;i>=1;i--)
	{
		a.s[i]-=b.s[i];
		if(a.s[i]<0) a.s[i+1]--,a.s[i]+=base;
	}
	while(!a.s[a.len]&&a.len>0) a.len--;//去掉前导零 
	return a;
 } 
bool judge(bignum a,bignum b)
{
	if(a.len!=b.len) return a.len>b.len;
	for(int i=a.len;i>=1;i--)
	 if(a.s[i]!=b.s[i]) return a.s[i]>b.s[i];
	return true;
}
bignum operator % (bignum a,bignum b)
{
	while(judge(a,b)) a=a-b;
	return a;
}

char str[10000+5];
void read(bignum &a)
{
	scanf("%s",str);
	reverse(str,str+strlen(str));
	int &len=a.len=0;
	for(int i=0,w;i<strlen(str);i++,w*=10)
	{
		if(i%9==0) len++,w=1;
		a.s[len]+=w*(str[i]-'0');
	}
}
void print(bignum a)
{
	printf("%d",a.s[a.len]);
	for(int i=a.len-1;i>=1;i--)
	 printf("%09d",a.s[i]);
	puts("");
}
int main()
{
	bignum a,b,c;
	read(a);read(b);
	while(b.len)
	{
		c=a%b;
		a=b;
		b=c;
	}
	print(a);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值