poj2338.cpp

来自「poi2338,北大acm里面的题目代码。」· C++ 代码 · 共 82 行

CPP
82
字号
#include <stdio.h>
#include "iostream"
int i,j,k,m,n;
char info[1000];

int state;
double base, vula;

int v[256];


#define DEC 2
#define BDONE 5
#define DSTART 1
#define BASE 4
#define BSTART 3
#define checkTo(x) if (!(x)) {printf("no\n");goto bad;}


main(){
   for (i=0;i<255;i++) v[i] = -1;
   for (i=0;i<=9;i++) v[i+'0'] = i;
   for (i=0;i<=5;i++) v[i+'a'] = i+10;
   scanf("%d",&n);
   gets(info);
   while (n--) {

	  gets(info);
      state = DSTART;
      vula = base = 0;
      for (i=0;info[i];i++) {
         char c = info[i];
         switch(state) {
            case DSTART: {
               checkTo(v[c] >=0 && v[c] <= 9);
               vula = v[c];
               state = DEC;
               break;
            }
            case DEC: {
               if (c == '#') {
                  checkTo(vula >= 2 && vula <= 16);
                  base = vula;
                  vula = 0;
                  state = BSTART;
                  break;
               }
               checkTo (v[c] >= 0 && v[c] <= 9);
               vula = vula * 10 + v[c];
               break;
            }
            case BSTART: {
               checkTo (v[c] >= 0 && v[c] < base);
               vula = v[c];
               state = BASE;
               break;
            }
            case BASE: {
               if (c == '#') {
                  state = BDONE;
                  break;
               }
               checkTo (v[c] >= 0 && v[c] < base);
               vula = vula * base + v[c];
               break;
           }
           case BDONE: {
              checkTo (c == '#');
              checkTo (vula >=2 && vula <= 16);
              base = vula;
              vula = 0;
              state = BSTART;
              break;
           }
        }
      }
      checkTo(state == DEC || state == BDONE);
      printf("yes\n");
      bad:;
   }

}

⌨️ 快捷键说明

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