用于修剪百分之几千分之一数的算法

时间:2013-08-12 11:43:13

标签: c++ objective-c algorithm numbers

我需要检测我需要显示的哪个词与用户得分相对应。

我有下一个开关:

switch (score) {
        case 0:
            outString = @"String1";
            break;
        case 1:
            outString = @"String2";
            break;
        case 2:
            outString = @"String3";
            break;
        case 3:
            outString = @"String3";
            break;
        case 4:
            outString = @"String3";
            break;
        case 5:
            outString = @"String1";
            break;
        case 6:
            outString = @"String1";
            break;
        case 7:
            outString = @"String1";
            break;
        case 8:
            outString = @"String1";
            break;
        case 9:
            outString = @"String1";
            break;           

        default:
            break;
    }

但是,当得分为29或109时,我如何使用相同的开关。所以我需要在第一种情况下修剪20得到9而在第二种情况下我需要修剪100得到9。

之前我使用过这个算法,但我忘了怎么做:(

所以接下来的目标是 - 我每次只需要0到9之间的数字而没有十分之几千分之一的数字。

2 个答案:

答案 0 :(得分:4)

如果你的单词总是取决于数字的最后一位,你只需在开关条件下使用它(使用模数运算符):

switch (score % 10)
   ...

如果只有29和129是特殊情况,那么您可以对同一个案例使用多个标签:

case 9:
case 29:
case 109:
        outString = @"String1";
        break;

答案 1 :(得分:2)

比使用巨型switch语句好多了,就是使用查找表:

std::string score_string(unsigned int score)
{
    static const std::string strings = {"String1","String2","String3",...};
    static const int strings_count = 10; //10 strings in the lookup table, for example.

    return strings[score % strings_count];
}