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 将携带其余部分。我将在我的 main 中有一个循环,它将继续调用 idigitizer,直到号码的所有数字都分开。问题是我不知道如何处理零以及如何在完成最后一位数字时使该过程正确终止。欢迎任何帮助。提前致谢。

编辑:为了更清楚。我不希望数字中间可能出现的零丢失。如果我得到数字 100047 作为输入,我希望 idigitizer 返回:

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

3 回答 3

2

我会改用这样的东西:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int getFirstDigit( int number );
int getRestOfNumber( int number );
int getNumberOfMissingZeros (int number, int restOfNumber);

int main(int argc, char* argv[]){

   int x = 500574;
   int firstDigit;
   int restOfNumber;

   int n; /* loop index */

   firstDigit = getFirstDigit(x);
   restOfNumber = getRestOfNumber(x);

   printf("The first digit of %d is %d.\n",x,firstDigit);
   printf("The rest of the number is ");

   for( n = 0; n<getNumberOfMissingZeros(x,restOfNumber); ++n ){
     printf("0");
   }

   printf("%d.",restOfNumber);

   return EXIT_SUCCESS;
  }

int getFirstDigit( int number ){

  return number / (int)floor( pow(10,floor(log10( (double)number ))) );

}

int getRestOfNumber( int number){

   return number % (int)floor( pow(10,floor(log10( (double)number ))) );

}

int getNumberOfMissingZeros (int number, int restOfNumber){

  int digitsOriginally;
  int digitsInRestOfNumber;

  digitsOriginally = floor(log10( (double)number ) );
  digitsInRestOfNumber = floor(log10( (double)restOfNumber ) );

  return digitsOriginally - digitsInRestOfNumber - 1;

}

神奇之处在于表达式(int)floor( pow(10,floor(log10( (double)number ))) ); 这获取值的大小,如 52330,它将返回 10000,因为 52330 中有五位数字。这使得提取最高数字变得容易。

于 2011-12-27T17:19:26.773 回答
1

给定问题的精确措辞约束:a function that will take an int and separately return the leftmost digit and the rest of the number做不到,因为不可能用整数表示前导零,所以传回“余数”势必造成信息永久丢失

正如《迷失太空》中的机器人所说,“它不会计算”。

于 2011-12-27T17:15:10.300 回答
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 回答