• <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   管理


            国产产无码乱码精品久久鸭| 色婷婷久久综合中文久久一本| 伊人久久精品线影院| 97r久久精品国产99国产精| 亚洲精品乱码久久久久久中文字幕| 久久综合伊人77777| 久久午夜福利电影| 亚洲国产成人久久一区WWW| 久久久国产精品| 深夜久久AAAAA级毛片免费看| 女同久久| 久久精品国产亚洲AV香蕉| 国产偷久久久精品专区 | 国产精品伦理久久久久久| 99久久国产综合精品五月天喷水 | 伊人久久精品线影院| 久久精品国产影库免费看| 亚洲国产精品久久66| 久久久WWW成人免费精品| 伊人久久成人成综合网222| 久久精品国产亚洲αv忘忧草| 久久丫精品国产亚洲av| 久久精品国产一区| 一本大道久久东京热无码AV| 久久久久亚洲精品天堂| 色综合久久最新中文字幕| 亚洲精品tv久久久久久久久久| 亚洲狠狠婷婷综合久久蜜芽| 一级做a爰片久久毛片人呢| 亚洲精品国产自在久久| 精品久久久久香蕉网| 久久精品国产亚洲5555| 狠狠色婷婷久久一区二区| 日本精品久久久久中文字幕| 怡红院日本一道日本久久| 久久婷婷是五月综合色狠狠| 国产精品天天影视久久综合网| 亚洲日本va午夜中文字幕久久| 国产成人久久激情91| 国产精品久久久久久久app| 国产99久久久国产精免费|