⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zp1499.cpp

📁 一个acm题目系统会自动删除debug和release目录
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include <stdio.h>
#include <string.h>

char *strmov(char *s)
{
  int i,k=0,ln=strlen(s);
  while (s[k]=='0' && k<ln)
    k++;
  for (i=k;i<=ln;i++)
    s[i-k]=s[i];
  return s;
}
int strlens(char *s)
{
  int i=0,ln=strlen(s);
  while (s[i]=='0' && i<ln)
    i++;
  ln-=i;
  return ln;
}
int sintcmp(char *s1, char *s2)
{
  int ln1,ln2;
  ln1=strlens(s1);
  ln2=strlens(s2);

  if (ln1>ln2)
    return 1;
  else
    if (ln1<ln2)
      return -1;
  if (ln1==0)
    return 0;
  int k=0,l=0;;
  while (s1[k]=='0')
    k++;
  ln1=strlen(s1);
  while (s2[l]=='0')
    l++;
  for (int i=k;i<=ln1;i++)
    if (s1[i]>s2[i-k+l])
      return 1;
    else
      if (s1[i]<s2[i-k+l])
        return -1;
  return 0;
}
void ladd(char *s1,const char s2)
{
  int l=strlen(s1);
  for (int i=l+1;i>0;i--)
    s1[i]=s1[i-1];
  s1[0]=s2;
}
void radd(char *s1,const char s2)
{
  int l=strlen(s1);
  s1[l]=s2;
  s1[l+1]='\0';
}
void ldec(char *s)
{
  int l=strlen(s);
  for (int i=0;i<l;i++)
    s[i]=s[i+1];
}
void strlet(char *s1,const char *s2)
{
  int k=0,l=strlen(s2);
  while (s2[k]=='0' && k<l)
    k++;
  for (int i=k;i<=l;i++)
    s1[i-k]=s2[i];
}
int main(int argc, char* argv[])
{
  char st[81],a[81][81]={0},tm[81],mx[81];
  int ln,i,j,t,l,v;
  //long  k,kk,mx,a[81]={0};
  while (scanf("%s",st) && strcmp(st,"0")!=0)
  {
    ln=strlen(st);
    for (i=0;i<=ln;i++)
      a[i][0]='\0';
    a[1][0]=st[0];
    a[1][1]='\0';
    for (i=2;i<=ln;i++)
    {
      j=i-1;
      tm[0]=st[j];
      tm[1]='\0';
      while (j>=0)
      {
        if (sintcmp(tm,a[j])>0 || strlens(a[j])==0)
        {
          if (sintcmp(tm,a[i])<0 || strlens(a[i])==0)
            strlet(a[i],tm);
        }
        j--;
        ladd(tm,st[j]);
      }
    }
    l=strlens(a[ln]);
    strlet(mx,a[ln]);

    for (i=0;i<=ln;i++)
      a[i][0]='\0';
    t=ln-l;
    strlet(a[t],mx);

    for (i=t;i>0;i--)
    {
      v=i-l;
      if (v<0)
        v=0;

      while (v<i && st[v]=='0')
        v++;
      if (v==i)
      {
        v--;
        while (st[v]=='0' && v>0)
          v--;
      }//100101001
      tm[0]=st[v];
      tm[1]='\0';

      for (j=v;j<i-1;j++)
        radd(tm,st[j+1]);
      //while (st[j+1]=='0')
        //radd(tm,st[++j]);

      while (strlen(tm))
      {
        if (sintcmp(tm,a[i])<0)
        {
          if (sintcmp(tm,a[v])>0 || strlens(a[v])==0)
            strlet(a[v],tm);
          if (st[v]=='0')
            strlet(a[v],a[i]);
        }
        v++;
        ldec(tm);
      }
    }
    i=0;
    while (i<ln)
    {
      while (st[i]=='0')
      {
        printf("0");
        i++;
      }
      printf("%s",a[i]);
      if (i<t)
        printf(",");
      i+=strlens(a[i]);
    }
    printf("\n");
  }
  return 0;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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