将int拆分为单个数字。如何处理零

时间:2011-12-27 17:01:30

标签: c int digits

我正在尝试创建一个函数,它将获取一个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返回数字的最左边部分,*数字将返回其余部分。 我将在我的主要循环中继续调用idigitizer,直到数字的所有数字分开。 问题是我不知道如何处理零以及如何使用最后一个数字完成此过程正确终止。欢迎任何帮助。提前致谢。

编辑:使其更清晰。我不希望数字中间可能的零丢失。如果我得到数字100047作为输入我想要idigitizer返回:

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

3 个答案:

答案 0 :(得分: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中有五位数。这使得它很容易提取最高位数。

答案 1 :(得分:1)

考虑到问题的精确措辞限制:a function that will take an int and separately return the leftmost digit and the rest of the number它无法完成,因为无法用整数表示前导零,因此传回“数字的其余部分”必然会导致永久性信息丢失

迷失在空间中的机器人会说“它不会计算。”

答案 2 :(得分: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;
   }    

}