试图打印出没有数组的数字的名称

时间:2014-01-15 00:25:46

标签: objective-c loops int switch-statement

我试图反转用户输入的数字,以便我可以按正确的顺序打印出来。假设用户输入957,程序应该打印出来 九 五 七 但是,我不明白我应该如何实际翻转这个数字。这就是我到目前为止所拥有的:

int num;
    int revNum;
    int rem;
    printf("Input a number:");
    scanf("%i", &num);

    while(num!=0)
    {

        rem = num%10;
        revNum = revNum*10+rem;
        num/=10;
        switch(rem)
        {
            case 0:
                printf("zero\n");
                break;
            case 1:
                printf("one\n");
                break;
            case 2:
                printf("two\n");
                break;
            case 3:
                printf("three\n");
                break;
            case 4:
                printf("four\n");
                break;
            case 5:
                printf("five\n");
                break;
            case 6:
                printf("six\n");
                break;
            case 7:
                printf("seven\n");
                break;
            case 8:
                printf("eight\n");
                break;
            case 9:
                printf("nine\n");
                break;
        }

    }

其中rem是余数,revNum是反转的数字,num是数字。请帮助,并提前感谢!

1 个答案:

答案 0 :(得分:0)

编辑我在问题标题中错过了“没有数组”,我会在这里留下答案......

如果您的问题正在扭转数字,那么look at this answer。您必须先撤消该号码,然后将您的算法与switch/case一起打印,或使用NSNumberFormatter,如下所述。


原始答案:

您已经标记了您的问题Objective-C,但您的代码是纯粹的C.让我们首先通过实际使用Objective-C使其更清洁:

使用NSNumberFormatter代替您的switch语句:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterSpellOutStyle;

您现在可以将数字转换为[numberFormatter stringFromNumber:@(rem)]的字符串,它也适用于不同的区域设置。

现在我们有NSString个对象,我们可以把它们放在一个数组中:

NSMutableArray *strings = [[NSMutableArray alloc] init];
while(num!=0) {
    int rem = num%10;
    num/=10;
    [strings addObject:[numberFormatter stringFromNumber:@(rem)]];
}

现在可以反向迭代字符串:

(for NSString *s in strings.reverseObjectEnumerator) {
    NSLog(@"%@", s);
}

或者简单地在没有循环的情况下反转数组:

NSArray *result = strings.reverseObjectEnumerator.allObjects