如何在 C 中找到 long 的长度(位数)?

How to find the length(number of digits)of a long in C?

这是提示用户输入的代码

#include <stdio.h>
#include <cs50.h>

//prompt user for number

int main(void)
{
      long number = get_long("Enter card number: "); 
}

例如你可以这样做:

#include <stdio.h>
#include <string.h>
void main()
{
    long alpha = 352;
    char s[256];
    sprintf(s,"%ld",(alpha >= 0L) ? alpha : -alpha );
    printf("long digits: %lu",strlen(s));

}

下面的程序会对你有所帮助,但最好再努力一下

     #include <stdio.h>
     #include <cs50.h>

        //prompt user for numb er

    int main(void)
    {
        long number = get_long("Enter card number: "); 
        int count = 0; 
        do{ 
            number = number / 10; 
            ++count; 
        }while (number != 0) ;

        printf("length of number = %d",count);

    }

如果您允许自己使用浮点数,则正整数 A 的位数 B 是以 B 为底的 A 的对数加 1。以 10 为底工作你可以写:

long get_num_digits(long a)
{
    long c;

    if (a == 0) {
        return 1;
    }
    if (a < 0) {
        a = -a;
    }
    c = (long)log10((double)a);
    ++c;

    return c;
}

此版本解决了 Andrew Henle 提出的问题,并且能够处理具有任意位数的 long。

在对非正参数采取必要的预防措施后,我们以 2 为底数计算参数的对数,并通过乘以 lod_10(2) 将对数底数更改为以 10 为底数。

必须相应地选择以 10 为底的对数 2 的位数。以下版本适用于 1 到 1000 位长,不使用浮点数、一次整数乘法、一次整数除法和最多 N-1 次移位,其中 N 是参数的位数。


    /*
     * Using 3 digits from log_10(2), we have enough precision to calculate the 
     * number of digits of a 1000 bit number.
     */
    /* #define LOG_10_2 301029995663981198 */
    #define LOG_10_2_NUMERATOR    301
    #define LOG_10_2_DENOMINATOR 1000

    long get_num_digits3(long a)
    {
        long c;
        long i;

        if (a == 0) {
            return 1;
        }
        if (a < 0) {
            a = -a;
        }
        /* i = log_2(a); */
        i = 0;
        while (a) {
        a >>= 1;    
        ++i;
        }
        /* c = log_10(a) + 1 */
        c = (long)(LOG_10_2_NUMERATOR * i);
        c /= LOG_10_2_DENOMINATOR;
        ++c;

        return c;
    }