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;
}