1

だから私は私が作っている簡単なパズルでプレイヤー入力である4桁の数字を持っています、私は各数字をチェックできるようにしたいです、たとえば数字が4601である場合は右の2番目の数字をチェックしたいですもちろん6になりますが、4桁の数字をすべてテストする以外の方が速いのでしょうか。検索でいくつかの結果が見つかりましたが、それらは役に立ちませんでした。彼らは私をもっと混乱させました。誰もがそれらを理解できるように、答えをフレーズしてください。また、私はc++を使用しています。

4

3 に答える 3

4

任意の整数から2番目に重要な(基数10)桁を取得するには、次のiようにします。

while (i >= 100)
    i /= 10;
return i % 10;

もちろん、これはそもそも10以上の数を想定しています。番号を保持する必要がある場合は、(明らかに)コピーを操作する必要があります。

編集:

算術演算または文字列演算のいずれかを使用して、任意の桁を抽出するための関数を定義できます。

算術ソリューション:

int extractDigit(size_t digit, int n) {
    int mask = 1;
    while ( digit --> 0 )
        mask *= 10;
    if (n < mask / 10) { // insufficient digits
        return -1; // or some other appropriate error handling.
    while ( n >= mask )
        n /= mask;
    return n % 10;
}

文字列ソリューション:

#include <sstream>
#include <string>
using std::string;
using std::stringstream;

int extractDigit(size_t digit, int n) {
    string result = static_cast<stringstream&>(stringstream() << n).str();
    if (result.size() < digit) {
        return -1;
    }
    return result[digit-1] - '0';
}

これらのソリューションはどちらも、それnが非負になることを暗黙的に想定しています。必要に応じて、符号なしデータ型を使用して、この前提条件を適用できます。また、これらの関数は両方とも、最も重要なものが位置1にあり、位置が右に増加するように桁の位置を定義しています。

于 2012-11-12T05:08:11.267 に答える
1

数字を取得した後、何をするかについては何も推測していませんが、必要な数字が1つしかない場合は、以下を使用できます。

int a=1234;
char b[4];
sprintf(b,"%d",a);
char c=b[1];

cこれで、4桁の数字の2桁目ができました。同様に、文字配列へのインデックスを使用してすべての数字にアクセスできますb

C ++と同等のplsについては、以下を参照してください。

  std::ostringstream out;
  out << age;

out.str()[1]2桁目が表示されます。

于 2012-11-12T05:25:17.693 に答える
0

数値をとして読み取り、配列intに変換して、各文字を数字として確認できます。char

例:

char digits[5];
int number;
//Read number in
scanf("%d",&number);
//Make sure it's 4 digits
number%=10000;
//Convert it to a char array
sprintf(digits,"%d",number)

if(digits[1]=='6')
{
    //do stuff
}
于 2012-11-12T05:05:21.773 に答える