【问题标题】:How to get the number of digits of an integer?如何获得整数的位数?
【发布时间】:2014-05-24 00:49:55
【问题描述】:

下面的程序足以找到输入给定的任何字符串长度的长度,但是,我需要找到整数变量的长度,而不是字符串。

为此输入一个数字确实有效,但如果我将 s 扫描为 int 类型则无效。

int main()
{
   char s[1000];
   char i;
   int u=5;
   do
   {
       char s[1000];
       char i;
       int u=5;
       system("cls");
       printf("Enter a string: ");
       scanf("%s",s);
       for(i=0; s[i]!='\0'; ++i);

       printf("Length of string: %d",i);
       getch();
  }
 while(u==5);
getch();
}

所以我只需要修改这个小程序以接受整数变量,或者将计算的 int 变量转换为字符串。

有什么想法吗?

编辑:长度 = 字符数,所以 25 有 2,3456 有 4 等等

【问题讨论】:

  • 无需道歉。只是修复它们。我的意思是缩进。
  • 请定义“整数变量的长度”。谢谢。
  • 这个问题与数据库无关,编辑你的标题以反映你真正追求的东西。
  • 它已经改变了,对我来说至少它说如何获取整数的位数?
  • 如果你有 C99 编译器,ndigits = snprintf(NULL, 0, "%d", value); 可以工作。

标签: c string file integer structure


【解决方案1】:

您可以使用以下公式计算以 m 为底的 n 的长度:

ceil(log(n + 1, m))

其中 ceil 是上限(向上取整)函数,log(a, b) 是 a 以 b 为底的对数。

【讨论】:

  • 没有使用任何能力?
  • @user3503792, m 是基础,所以在你的情况下它是 10。这个函数是 IMO 最优雅的解决方案,而不是使用 sprintf 变体。
  • 另外,如果值为零,则失败
  • @SGeorgiades:这可以很容易地用 abs() 纠正,然后唯一的问题是零。所以整个实现可以是: n == 0 ? 1 : ceil(log(abs(n), m))
  • @LieRyan:除了你没有计算你的长度中的“减号”。也许 (n == 0) ? 1 : ceil(log(abs(n),m) + (n
【解决方案2】:
#include<stdio.h>
main()
{
                 int count=1,n;
                 scanf("%d",&n);
                 while(n/=10)
                       count++;
                 printf("result=%d",count);
}

count 给出数字 n 的位数

【讨论】:

    【解决方案3】:

    要确定打印十进制数的字符数(假设valueint),您可以执行以下操作:

    int intlen = 0;
    if (value < 0)         // for negative values, allow a char for the minus sign
    {
        value = -value;
        ++intlen;
    }
    while (value >= 10)     // as long as the value is 1 or more,
    {
        value /= 10;        // divide by 10,
        ++intlen;           // ...and add one to the length
    }
    ++intlen;               // add one for last digit (even if it's zero)
    

    使用上面描述的 ceil/log 函数可能更容易,但是这个不需要数学库(如果这是一个问题)

    另一种蛮力方法如下:

    char temp[12];
    int intlen = sprintf(temp,"%i",value);
    

    这利用了sprintf 返回放置在字符串缓冲区中的字符数这一事实。

    【讨论】:

      【解决方案4】:

      您可以使用下面的代码来查找整数的位数:

      int count=0;
      while(n!=0)
      {
        n/=10;             
        ++count;
      }
      

      n 是您的输入整数,count 是它的长度。

      【讨论】:

        【解决方案5】:

        如果您想将整数读取为整数,即%d 并计算该整数中的位数,请查看以下代码 sn-p。

        int no,length=0;
        printf("Enter number");
        scanf("%d",&no);
        while(no!=0)
        {
        length+=1;
        no=no%10;
        }
        printf("Length=%d",length);
        

        【讨论】:

          猜你喜欢
          • 2019-12-29
          • 1970-01-01
          • 2023-04-09
          • 1970-01-01
          • 2020-08-10
          • 2016-07-03
          • 2017-10-09
          • 2021-10-01
          • 2014-01-30
          相关资源
          最近更新 更多