获取INT中的数字数,而无需分开10

Get number of digits in an int without divided by 10

本文关键字:INT 数字 获取      更新时间:2023-10-16

有没有办法在没有划分的情况下获得数字数量?

例如,我有这个:

int main()
{
  int dividend = 100;
  int remainder=0;
  int temp = 0;
  while(dividend>=10)
  {
    dividend = dividend-10;
    temp+=1;
  }
  printf("Quotient: %dn",temp);
  printf("Reminder: %dn",dividend);
}

现在,我将添加以计算可变股息的数字数量。

您必须知道使此函数有用的最大整数范围。无功能调用,没有分区...

int nbDigitInteger(int number)
{
    if (-10 < number && number < 10) return (1);
    if (-100 < number && number < 100) return (2);
    if (-1000 < number && number < 1000) return (3);
    if (-10000 < number && number < 10000) return (4);
    if (-100000 < number && number < 100000) return (5);
    ...
}

有时候,更简单是最好的。

如果允许使用对数,则

int i = 123456;
int digitsCount = ceil(log10(abs(i)+1.0));
cout << digitsCount;

6

您的问题太宽了,代码也无关。

由于您试图发布代码,我将为您所要求的问题提供指南。自己写代码。

  • 采用绝对整数值。(abs()(
  • 将其打印到(足够大的(缓冲区。(sprintf()/snprintf()(。
  • 使用strlen()获取缓冲区的长度(如字符串(。

是非常优雅的解决方案o @yola的替代方案。

intPow10将10返回到功率exponent。我没有使用math.h中的pow,因为它在数字上很昂贵,正如 @汤姆指出的那样,它可能导致无效的结果。

#include <stdio.h>
#include<math.h>
int intPow10(int exponent){
    int retval=1;
    while (exponent){
        retval *=10;
        exponent --;
    }
    return retval;
}
int numDigits(const int i) {
    int digits = 1;
    while (intPow10(digits) <= fabs(i)) {
        digits++;
    }
    printf("%i has %i digits.n", i,digits);
    return digits;
}
int main() {
    numDigits(1);
    numDigits(-1);
    numDigits(10);
    numDigits(13);
    numDigits(-112312);
}

这个代码高尔夫是什么?

int b = 1000;
char a[10] = itoa(b);
printf("%dn", strlen(a)); // 4

这只是将B变成一个字符串,即然后,打印长度。没有ATOI((和ITOA((,我们该怎么办?我们自己的功能!