iOS objective-c中数字转为罗马数字

iOS objective-c中数字转为罗马数字

方法是根据JAVA的代码改写的,测试了1到20的转换,没有发现问题。

/**
 * 数字转罗马
 */
-(NSString *)toRoman:(int)num {
     NSString *roman = @"";
    if (num > 0 && num < 100) {
    
        NSArray *pChars = [[NSArray alloc]initWithObjects: @"L", @"X", @"V", @"I", nil];
        NSArray *pValues = [[NSArray alloc]initWithObjects:@"50",@"10" , @"5", @"1" , nil];
   
       
        while (num > 0) {
            if (num >= 90) {
                roman = [roman stringByAppendingString:@"XC"];
                num -= 90;
                continue;
            }

            if (num >= [[pValues objectAtIndex:0] intValue]) {
                NSString *string = [NSString stringWithFormat:@"%@",[pChars objectAtIndex:0]];
                roman = [roman stringByAppendingString:string];
                num -= [[pValues objectAtIndex:0] intValue];
                continue;
            }
            if (num >= 40) {
                roman = [roman stringByAppendingString:@"XL"];
           
                num -= 90;
                continue;
            }
            if (num >= [[pValues objectAtIndex:1] intValue]) {
                int x10 = num /[[pValues objectAtIndex:1] intValue];
                for (int i = 0; i < x10; i++) {
                    
                    NSString *string = [NSString stringWithFormat:@"%@",[pChars objectAtIndex:1]];
                    roman = [roman stringByAppendingString:string];
                    num -= [[pValues objectAtIndex:1] intValue];
                }
                continue;
            }
            if (num >= 9) {
            roman = [roman stringByAppendingString:@"IX"];
            
                num -= 9;
                continue;
            }
            if (num >= [[pValues objectAtIndex:2] intValue]) {
                
                NSString *string = [NSString stringWithFormat:@"%@",[pChars objectAtIndex:2]];
                roman = [roman stringByAppendingString:string];

                num -= [[pValues objectAtIndex:2] intValue];
                continue;
            }
            if (num == 4) {
                roman = [roman stringByAppendingString:@"IV"];
                num = 0;
                continue;
            }
            for (int i = 0; i < num; i++) {
                
                NSString *string = [NSString stringWithFormat:@"%@",[pChars objectAtIndex:3]];
                roman = [roman stringByAppendingString:string];
            
                num -= [[pValues objectAtIndex:3] intValue];
            }
        }
        
       
    } else {
        NSLog(@"数字超出范围!");
    }
    
     return roman;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值