0

int を取り、左端の数字と残りの数字を別々に返す関数を作成しようとしています。

int idigitizer(int *number) {
int i = 1;
int head = 0;
int tmp = 0;

tmp = *number;
while (tmp > 9) {
    if ((tmp/i) < 10) {
        head = tmp/i;
        *number = *number - (head*i);
        return head;
    } else {
        i = i*10;
    }
}
number = 0;
return tmp;
} 

idigitizer は数値の左端の部分を返し、*number が残りを運びます。数値のすべての桁が分離されるまで idigitizer を呼び出し続けるループをメインに設定します。問題は、ゼロを処理する方法と、最後の桁で完了したときにこのプロセスを正しく終了させる方法がわからないことです。どんな助けでも大歓迎です。前もって感謝します。

編集:より明確にするために。数字の途中にある可能性のあるゼロが失われるのは望ましくありません。入力として番号 100047 を取得した場合、idigitizer に次の値を返します。

return - *number
         100047
1        00047
0        0047
0        047
0        47
4        7
7
4

3 に答える 3

0

質問を正しく理解していれば、このようなものに適切なループを配置するとうまくいくはずです。

//! Given a number return the least significant digit.
//! Return true if all went well. False otherwise. (Clearly we
//! can handle errors better.)
/*!
   \param[in/out] n
   The number to strip the least significant digit from.
   \param[out] d
   The least significant digit of n.
*/
bool digitize(int& n, int& d)
{
   if ( n == 0 )
      return false
   else
   {
      d = n  % 10;
      n = n / 10;
      return true;
   }    

}
于 2011-12-27T17:05:42.453 に答える