2015年7月30日 星期四

LEET code--Integer to Roman


Integer to Roman


Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.


簡單  值觀就是直接暴力法了

麻煩的是
4 9 40 90 400 900
要另外處理


/*
I=1 V=5 X=10 L=50 C=100 D=500 M=1000
IV=4 IX=9 XL=40 XC=90 CD=400 CM=900
*/

char* intToRoman(int num) {
    int size=0;
    char *ans;
    int i=0;
    while(num!=0){
        if(num/1000){
            for( i=0;i                ans[size++]='M';
             
            }
            num-=1000*(i);
         
        }
        if(num/900){
            ans[size++]='C';
            ans[size++]='M';
            num-=900;
        }
        if(num/500){
            for( i=0;i                ans[size++]='D';  
            }
            num-=500*(i);;
        }
        if(num/400){
            ans[size++]='C';
            ans[size++]='D';
            num-=400;
        }
        if(num/100){
            for( i=0;i                ans[size++]='C';  
            }
            num-=100*(i);
        }
        if(num/90){
            ans[size++]='X';
            ans[size++]='C';
            num-=90;
        }
        if(num/50){
            for( i=0;i                ans[size++]='L';  
            }
            num-=50*(i);
        }
        if(num/40){
            ans[size++]='X';
            ans[size++]='L';
            num-=40;
        }
        if(num/10){
            for( i=0;i                ans[size++]='X';  
            }
            num-=10*(i);
        }
        if(num/9){
            ans[size++]='I';
            ans[size++]='X';
            num-=9;
        }
        if(num/5){
            for( i=0;i                ans[size++]='V';  
            }
            num-=5*(i);
        }
        if(num/4){
            ans[size++]='I';
            ans[size++]='V';
            num-=4;
        }
        if(num){
            for( i=0;i                ans[size++]='I';  
            }
            num-=1*(i);
        }
    }
    ans[size]='\0';
    return ans;
}

沒有留言:

張貼留言