zp1933_w.cpp

来自「浙江大学acm在线判题器代码集。 本人在浙大acm判题器上的所有代码(心血) 」· C++ 代码 · 共 87 行

CPP
87
字号
#include <stdio.h>
#include <string.h>

int ln,a[1000],b[1000],c[1000];

bool div(int d)
{
  int i;
  for (i=1;i<ln;i++)
    c[i]=a[i];
  c[ln]=0;
  for (i=1;i<ln;i++)
  {
    c[i+1]+=c[i]%d*10;
    c[i]/=d;
  }
  if (c[ln]==0)
  {
    for (i=1;i<ln;i++)
      a[i]=c[i];
    for (i=1;i<ln;i++)
    {
      b[i+1]+=b[i]%d*10;
      b[i]/=d;
    }
    return 1;
  }
  return 0;
}

int main(int argc, char* argv[])
{
  char st[1000];
  int i,t;
  while (scanf("%s",st) && st[1]!='\0')
  {
    ln=strlen(st)-4;

    t=st[ln]-'0';
    st[ln]='\0';

    a[1]=0;
    for (i=2;i<ln;i++)
      a[i]=st[i]-'0';

    b[1]=9;
    for (i=2;i<ln;i++)
      b[i]=0;

    for (i=ln-1;i>0;i--)
    {
      a[i]*=9;
      a[i]+=t;
      t=0;
      if (a[i]>9)
      {
        t=a[i]/10;
        a[i]%=10;
      }
    }

    for (i=0;i<2;i++)
      if (div(3)==0)
        break;
    for (i=0;i<ln-2;i++)
      if (div(2)==0)
        break;
    for (i=0;i<ln-2;i++)
      if (div(5)==0)
        break;

    t=a[1];
    for (i=1;i<ln;t+=a[++i])
      if (t)
        printf("%d",a[i]);
    printf("/");
    t=b[1];
    for (i=1;i<ln;t+=b[++i])
      if (t)
        printf("%d",b[i]);
    printf("\n");
  }
  return 0;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?