• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 7, comments - 13, trackbacks - 0, articles - 37
               :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理

            #include <stdio.h>
            #include <string.h>
            #include <ctype.h>
            char * index( const char *s, int c);
            /*
            ** State machine for romantoint
            **
            **        M       D       C       L       X       V       I
            **  0: +1000/0  +500/0  +100/1   +50/0   +10/2    +5/0    +1/3
            **  1:  +800/0   --     +100/0   +50/0   +10/2    +5/0    +1/3
            **  2:   --      --      +80/0   +30/0   +10/2    +5/0    +1/3
            **  3:   --      --      --      --       +8/0    +3/0    +1/3
            **
            */

            int FromRoman(char *s)
            {
                int n=0;
                int prev=0;

                while (*s!=' '&&*s!=NULL) {
                    switch (toupper(*s))
                    {
                        case 'M':   n += 1000 - prev*2;
                                    prev=0;
                                    break;
                        case 'D':   n +=  500 - prev*2;
                                    prev=0;
                                    break;
                        case 'C':   n +=  100;
                                    if (prev < 100) n -= 2*prev;
                                    prev=100;
                                    break;
                        case 'L':   n +=   50;
                                    if (prev <  50) n -= 2*prev;
                                    prev=0;
                                    break;
                        case 'X':   n +=   10;
                                    if (prev <  10) n -= 2*prev;
                                    prev=10;
                                    break;
                        case 'V':   n +=    5;
                                    if (prev <   5) n -= 2*prev;
                                    prev=0;
                                    break;
                        case 'I':   n +=    1;
                                    prev=1;
                                    break;
                    }
                    s++;
                }
                return n;
            }

            void PrintRoman(int n)
            {

                if (n<=0 || n>4999)
                 {
                    printf("out of range exception\n");
                    return;
                }

                while (n/1000)
                {
                    printf("M");
                    n -= 1000;
                }

                switch(n/100)
                {
                    case 0: break;
                    case 1: printf("C");    break;
                    case 2: printf("CC");   break;
                    case 3: printf("CCC");  break;
                    case 4: printf("CD");   break;
                    case 5: printf("D");    break;
                    case 6: printf("DC");   break;
                    case 7: printf("DCC");  break;
                    case 8: printf("DCCC"); break;
                    case 9: printf("CM");   break;
                }
                n %= 100;

                switch(n/10)
                 {
                    case 0: break;
                    case 1: printf("X");    break;
                    case 2: printf("XX");   break;
                    case 3: printf("XXX");  break;
                    case 4: printf("XL");   break;
                    case 5: printf("L");    break;
                    case 6: printf("LX");   break;
                    case 7: printf("LXX");  break;
                    case 8: printf("LXXX"); break;
                    case 9: printf("XC");   break;
                }
                n %= 10;
                switch(n) {
                    case 0: break;
                    case 1: printf("I");    break;
                    case 2: printf("II");   break;
                    case 3: printf("III");  break;
                    case 4: printf("IV");   break;
                    case 5: printf("V");    break;
                    case 6: printf("VI");   break;
                    case 7: printf("VII");  break;
                    case 8: printf("VIII"); break;
                    case 9: printf("IX");   break;
                }

                printf("\n");
            }

            #define STACKSIZE 1024
            int nitems=0;
            int stack[STACKSIZE];

            int Pop()
            {
                if (!nitems) {
                    printf("stack underflow\n");
                    return 0;
                }

                return stack[--nitems];
            }

            void Push(int n)
            {
                if (nitems == STACKSIZE-1) {
                    printf("stack overflow\n");
                    return;
                }

                stack[nitems++] = n;
            }


            int PrintTop(void)
            {
                if (!nitems) {
                    printf("stack underflow\n");
                    return -1;
                }
                else {
                    PrintRoman(stack[nitems-1]);
                    return 0;
                }
            }

            int PerformAdd(void)
            {
                int x,y;
                if (nitems < 2) {
                    printf("stack underflow\n");
                    return -1;
                }

                y = Pop();
                x = Pop();
               
                Push(x+y);

                return 0;
            }

            int PerformSub(void)
            {
                int x,y;
                if (nitems < 2) {
                    printf("stack underflow\n");
                    return -1;
                }

                y = Pop();
                x = Pop();
               
                Push(x-y);

                return 0;
            }

            int PerformMul(void)
            {
                int x,y;
                if (nitems < 2) {
                    printf("stack underflow\n");
                    return -1;
                }

                y = Pop();
                x = Pop();
               
                Push(x*y);

                return 0;
            }

            int PerformDiv(void)
            {
                int x,y;
                if (nitems < 2) {
                    printf("stack underflow\n");
                    return -1;
                }

                y = Pop();
                x = Pop();
               
                if (y!=0)
                    Push(x/y);
                else {
                    printf("division by zero exception\n");
                    Push(x);
                }

                return 0;
            }

            main()
            {
                char line[256];
             //freopen("H.in","r",stdin);
            // freopen("H.out","w",stdout);
                while (fgets(line,sizeof(line),stdin)) {
                    if (line[0] == '=')
                        PrintTop();
                    else if (line[0] == '+')
                        PerformAdd();
                    else if (line[0] == '-')
                        PerformSub();
                    else if (line[0] == '*')
                        PerformMul();
                    else if (line[0] == '/')
                        PerformDiv();
                    else {
                        int n = FromRoman(line);
                        if (n > 0) {
                            Push(n);
                        }
                    }
                }
            }

             


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            欧美精品一区二区久久| 久久一区二区三区99| 狠狠色丁香久久婷婷综合五月| 久久久老熟女一区二区三区| 国产精品欧美久久久天天影视| 99久久精品国产一区二区| 久久久久综合中文字幕| 亚洲第一极品精品无码久久| 国产精品一区二区久久国产| 久久狠狠一本精品综合网| 少妇内射兰兰久久| 久久久久久国产精品美女| 久久综合给合久久狠狠狠97色| 久久国产精品免费一区| 日韩久久久久久中文人妻| 久久性生大片免费观看性| 久久精品亚洲精品国产色婷| 色婷婷综合久久久久中文字幕| 91精品国产91久久久久福利| 亚洲欧美一级久久精品| 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品久久8x国产免费观看| 亚洲精品乱码久久久久久蜜桃| 久久综合中文字幕| 97r久久精品国产99国产精| 久久精品国产99久久久古代| 久久免费国产精品| 久久影院亚洲一区| 久久综合狠狠综合久久97色| 午夜不卡888久久| 热re99久久精品国产99热| 久久久久亚洲AV成人片| 久久国语露脸国产精品电影| 久久久久久久91精品免费观看| 欧美成a人片免费看久久| 久久国产午夜精品一区二区三区| 久久精品成人免费网站| 色综合久久最新中文字幕| 77777亚洲午夜久久多喷| 国产一级持黄大片99久久| 久久伊人精品青青草原高清|