zju 2678 Bishops on a Toral Board

其实就是求m和n的最大公约数,不过要大数,,可以用Euclid || stein写

#include <stdio.h>
#include <string.h>
char a[101],b[101];
int divide(int l,int ll);
int big(int l,int ll,char a[],char b[]);
void mod(int l,int ll);
char x[101];
int main()
{
  int flag,ll,l;
  flag=0;
  while(scanf("%s %s",a,b)!=EOF)
  {
    if(flag!=0)printf("\n");
    flag=1;
    l=strlen(a);
   ll=strlen(b);
mod(l,ll);
    printf("%s\n",b);
  }
  return 0;
}
int divide(int l,int ll)
{
int i,t,j,z;
  char aa[101],bb[101];
  for(i=0;i<l;i++)
  {
    if(x[i]!='0')break;
  }
  z=i;
  if(z>=l)
  {
   x[0]='\0';
    return 0;
  }
for(i=l-1,j=0;i>=z;i--,j++)
    aa[j]=x[i];
  aa[j]='\0';
  for(i=ll-1,j=0;i>=0;i--,j++)
    bb[j]=b[i];
  bb[j]='\0';
  while(l>ll||big(l,ll,aa,bb))
  {
    t=0;
    for(i=0;i<ll;i++)
    {
      if(t!=0&&aa[i]>'0'){aa[i]=aa[i]-t;t=0;}
      else if(t==1){aa[i]='9';t=1;}
      if(aa[i]>=bb[i]){aa[i]=aa[i]-bb[i]+'0';}
      else if(aa[i]<bb[i]){t++;aa[i]=aa[i]-bb[i]+10+'0';}
    }
    if(t!=0&&aa[i]>'0')aa[i]-=t;
    else while(t!='0'&&aa[i]=='0'){aa[i]='9';t=1;i++;}
    for(i=l-1;i>=0;i--)
    {
      if(aa[i]=='0')l--;
      else break;
    }
    aa[l]='\0';
  }
  for(i=l-1,j=0;i>=0;i--,j++)
    x[j]=aa[i];
  x[j]='\0';
return l;

}
int big(int l,int ll,char aa[],char bb[])
{
  int i;
  if(l<ll)return 0;
  else if(l>ll)return 1;
  for(i=l-1;i>=0;i--)
  {
    if(aa[i]>bb[i])return 1;
    else if(aa[i]<bb[i])break;
  }
  if(i<0)return 1;
  else return 0;
}
void mod(int l,int ll)
{
  int k,flag,i;
  char t[101];
  while(1)
  {
    flag=1;
    if(l<ll)
    {
       strcpy(t,a);strcpy(a,b);strcpy(b,t);
        i=l;l=ll;ll=i;continue;
    }
    for(k=0;k<ll;k++)
    {
      x[k]=a[k];
if(flag==1&&x[k]<b[k]){flag=0;}
      else if(flag==1&&x[k]>b[k]){flag=2;}
    }
    if(flag==0&&ll<l)
    { x[k]=a[k]; k++; }
    x[k]='\0';      
    i=k;
k=divide(k,ll);
    while(i<l)
    {
      x[k]=a[i++];
      k++;
      x[k]='\0';
      k=divide(k,ll);
    }
    if(k==0)return;
    else
    {
      strcpy(a,b);
      strcpy(b,x);
      l=ll;
      ll=k;
    }
  }
}

posted on 2007-09-14 00:20  xmx  阅读(319)  评论(0)    收藏  举报

导航