2017-01-12 13 views
0

変数の整数 "num"をそれぞれの桁で割った数をクリーンな商(0の余りを持つ)で数えることになっています。なぜ私のIf-Elseは本当に評価されないのですか?

注:各桁は一意であるとみなされるため、均等に割り切れる同じ桁の各桁をカウントする必要があります(つまり、222の場合、答えは3です)。

int solver(int num) //gets an integer 
{ 
    string numString = to_string(num); //convert integer to string so i can manipulate individual digits 
    int divisible=0; //will store a count of digits in "num" which can be divided evenly 

    for (int x = 1; x <= (end(numString) - begin(numString))/*string length*/; x++) 
    { 

     if (numString[x-1] == 0 || (end(numString) - begin(numString))-x >=1) //ignore digits which are 0 and or 0s that are last in the array 
      ++x; 

     if (num % numString[x - 1] == 0) //THIS NEVER EVALUATES TO TRUE. HOW COME??? 
      divisible++; 

    } 
    return divisible; //number of digits in variable "num" which can be evenly divided 
} 

この関数は常に0を返しますが、それをインクリメントするためのif-elseは常にfalseと評価されているため、(つまり、変数int型「割り切れに初期化されたものだ)とスキップ。私がチェックし、もし、そうでないことを確認しましたきています引数は有効な数値を保持しています(すべて整数)。結果の小数部分が評価のために決して到達しない整数なので、それはありますか?それは私が思いつくことができる最高の可能性です。トン解決する方法を知っている。

+6

文字列があります。文字列には文字が含まれています。文字(数字であっても)は数字ではありません。 '0!= '0' '。 –

+1

IDEを使用していますか?あなたは変数 '' 'int test = num%numString [x - 1];' 'を作成し、何のテストが等しいかを見てみることができます –

+0

@VictorTran私はnumを222に、テストは22を返しました....irdird –

答えて

2
  1. std::stringsize()機能を学ぶ。あなたは必要ありませんendbeginは、stringの長さを取得します。
  2. numString[x-1]は数値ではなくASCIIコードでcharを返します。たとえば、ASCIIコード0は、小数点以下は48です。 1桁の数値を取得するには、次のようにします。 numString[x-1] - '0'
+0

私は以前、変数* .lengthと一緒に何かを試してみて、不合理な数字を持っていると思います。私はそれらがメモリサイズか何か、私がオンラインで学んだものからと仮定します。 –

+1

'string :: length'は文字列中のバイト数を返します。*' size() 'と同じです。 [length doc]へのリンク(http://www.cplusplus.com/reference/string/string/length/)。あなたは 'string :: capacity'によって*メモリサイズ*を得るでしょう。 –

+0

これは:numString [x-1] - '0'が働いたことです。ありがとうございました –

関連する問題