3

私はC++開発に不慣れで、誰かが私がやろうとしていることで私を助けてくれることを望んでいました。

たとえば、整数入力が与えられた場合に、含まれる個別の桁数を返す関数が必要だとします。

たとえば、3つの整数がある場合:

int a = 19876;
int b = 25644;
int c = 4444;

'a'を関数に渡すと、5という数字が返されると思います。'b'が関数に渡された場合、'4'が返されることを期待します。'c'が関数に渡された場合、1が返されます。これは、個別の数値の数であるためです。

誰かが私がこれを達成する方法を説明してもらえますか?

4

5 に答える 5

6

整数の異なる小数桁の数を見つけたいということですか?

int distinct_digits(int value) {
    std::ostringstream out;
    out << value;
    std::string digits = out.str();
    std::sort(digits.begin(), digits.end());
    return std::unique(digits.begin(), digits.end()) - digits.begin();
}

(コンパイルもテストもされていませんが、基本的な考え方は機能するはずです)

于 2012-10-01T19:38:28.047 に答える
5

mod演算子を使用すると、次のように数えることができます。

int distinct(int a)
{
    int ele[10]={0};

    if(a==0) return 1;
    if(a<0) a=a*-1;

    while(a)
    {
        int t=a%10;
        ele[t]=1;
        a=a/10;
    }

    for (i=0;i<10;i++)
        if (ele[i])
            count++;

    return count;
}

これは、正の数と負の数の両方でのみ機能します。

于 2012-10-01T19:38:32.150 に答える
4

これはもっと簡潔かもしれませんが、私はあなたがソリューションがどのように機能するかを理解するのを手伝っています。

int digitCount(int number) {
    // make an array to store whether you've seen a given digit
    // note that there are 10 elements, one for each digit
    // this will be conveniently indexed 0-9
    bool digitSeen[10];

    // set each seen digit
    int count = 0;
    while (number != 0) {
        // get the rightmost digit with the modulo operator (%)
        int digit = number % 10;
        if (digitSeen[digit] == false) {
            // only count if this is the first time we have seen it
            ++count;
            digitSeen[digit] = true;
        }
        // pop off the right-most digit by dividing by 10
        number /= 10;
    }

    return count;
}
于 2012-10-01T19:41:27.560 に答える
1

'a'個別の数をうまく計算することはできますが、からに進む方法はありませんthe value of the variable a;。あなたはそれをハードコーディングすることができます-しかしそれはかなりメンテナンスが重いです。

于 2012-10-01T19:35:05.533 に答える
-1

浮動小数点を返して小数を取得する場合は、浮動小数点として返すだけで、コンパイラは暗黙の型変換を行う必要があります。これは一般的に良いコードではありませんが、機能します。より良い方法は、値を次のような一時的なフロートに渡すことです。

float a_float = a;
return a_float;
于 2012-10-01T19:35:45.273 に答える