【问题标题】:Trying to print out the name of a number w/o arrays试图打印出不带数组的数字的名称
【发布时间】:2014-01-15 00:25:46
【问题描述】:

我正在尝试反转用户输入的数字,以便我可以按正确的顺序打印出来。假设用户输入 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为数。请帮忙,提前谢谢!

【问题讨论】:

    标签: objective-c loops int switch-statement


    【解决方案1】:

    编辑:我错过了问题标题中的“没有数组”,无论如何我都会在这里留下答案......

    如果您的问题是反转号码,那么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
    

    【讨论】:

    • 我不能使用数组的原因仅仅是因为我们还没有在我正在上课的课程中学习它们。该类是objective c,这就是为什么我认为这段代码是obj c。
    • @user2967004 我添加了更多信息和指向另一个答案的链接,应该可以帮助您解决问题。至于你的代码是 C 还是 Objective-C,两者都是。 Objective-C 是 C 的超集,因此所有 C 代码也是有效的 Objective-C 代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多