用于C编程的数字计数功能赢得';超过11位数不能工作

用于C编程的数字计数功能赢得';超过11位数不能工作,c,C,以下函数用于计算数字中的位数。不幸的是,它不适用于11位或更多数字,我不知道为什么。我觉得它与数据类型有关,但我认为在这种情况下,long int就可以了。谢谢你的帮助 long long int getLength(long long int input) { long long int length = 0; while(input != 0) { input /= 10; ++length; } return (length); } 这可能不是答案,

以下函数用于计算数字中的位数。不幸的是,它不适用于11位或更多数字,我不知道为什么。我觉得它与数据类型有关,但我认为在这种情况下,long int就可以了。谢谢你的帮助

long long int getLength(long long int input)
{
  long long int length = 0;

  while(input != 0)
  {
    input /= 10;
    ++length;
  }
  return (length);
}

这可能不是答案,但请允许我在这里报告输出。你能再检查一下吗?这对我来说很有效

#include "stdio.h"

long long int getLength(long long int input)
{
  long long int length = 0;

  while(input != 0)
  {
    input /= 10;
    ++length;
  }
  return (length);
}

int main()
{
    printf("%lld\n", getLength(12345678901));   // 11
    printf("%lld\n", getLength(123456789012));  // 12
    printf("%lld\n", getLength(1234567890123)); // 13
    printf("%lld\n", getLength(0));             // 0
    printf("%lld\n", getLength(-123));          // 3
}
平台Windows 10和
gcc--version
返回

gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0
问题1:您真的需要键入
long-long-int
来报告位数吗


问题2:您是否在
printf
中正确使用了格式说明符
%lld

这可能不是答案,但请允许我在此处报告输出。你能再检查一下吗?这对我来说很有效

#include "stdio.h"

long long int getLength(long long int input)
{
  long long int length = 0;

  while(input != 0)
  {
    input /= 10;
    ++length;
  }
  return (length);
}

int main()
{
    printf("%lld\n", getLength(12345678901));   // 11
    printf("%lld\n", getLength(123456789012));  // 12
    printf("%lld\n", getLength(1234567890123)); // 13
    printf("%lld\n", getLength(0));             // 0
    printf("%lld\n", getLength(-123));          // 3
}
平台Windows 10和
gcc--version
返回

gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 7.3.0
问题1:您真的需要键入
long-long-int
来报告位数吗


问题2:在
printf
中是否正确使用了格式说明符
%lld

长度是否确实需要long-long int?我的意思是数字的长度,而不是数字本身

这段代码在我的编译器中运行良好

#include <stdio.h>

int getLength(long long int input)
{
    int length = 0;

    while(input != 0)
    {
        input /= 10;
        ++length;
    }
    return (length);
}

int main() {

    printf("Length of number : %d\n", getLength(12345678901234));

    return 0;
}

你真的需要长整型的长度吗?我的意思是数字的长度,而不是数字本身

这段代码在我的编译器中运行良好

#include <stdio.h>

int getLength(long long int input)
{
    int length = 0;

    while(input != 0)
    {
        input /= 10;
        ++length;
    }
    return (length);
}

int main() {

    printf("Length of number : %d\n", getLength(12345678901234));

    return 0;
}

“它不起作用”不是一个很好的诊断。什么不起作用?你看到错误的结果,程序崩溃,程序挂起?欢迎来到Stackoverfow。大小可能取决于编译器以及计算机是32位还是64位。32位无符号整数的范围为0到4294967295。0到65535将是16位无符号。64位实现中的无符号long-long的范围为0到18446744073709551615。如果需要查找作为字符串提供的任何整数的长度,只需将其作为字符串读取即可。1)“t不适用于具有11位或更多位的数字”,因为代码正在调用
getLength()
。张贴一封电子邮件。2)
getLength(0)
在更经常需要1时返回0。
long
可以表示至少17个十进制数字,因此您的代码应该没有问题。很可能调用者正在转换32位类型,通常来说,32位类型并不总是能够表示超过9位的十进制数字。如果没有代码演示如何调用函数,没有人能提供帮助。“它不工作”不是一个很好的诊断。什么不起作用?你看到错误的结果,程序崩溃,程序挂起?欢迎来到Stackoverfow。大小可能取决于编译器以及计算机是32位还是64位。32位无符号整数的范围为0到4294967295。0到65535将是16位无符号。64位实现中的无符号long-long的范围为0到18446744073709551615。如果需要查找作为字符串提供的任何整数的长度,只需将其作为字符串读取即可。1)“t不适用于具有11位或更多位的数字”,因为代码正在调用
getLength()
。张贴一封电子邮件。2)
getLength(0)
在更经常需要1时返回0。
long
可以表示至少17个十进制数字,因此您的代码应该没有问题。很可能调用者正在转换32位类型,通常来说,32位类型并不总是能够表示超过9位的十进制数字。如果没有代码演示如何调用函数,没有人能帮上忙。奇怪的是,“计算一个数字中的位数”。您认为
getLength(0)
应该返回0还是1。最后,这是OP的电话,只是想知道您的视图。@chux它应该在我的视图中返回1,表示“计算数字中的位数”。您认为
getLength(0)
应该返回0还是1。最后,这是OP的电话,只是想知道您的视图。@chux在我的视图中它应该返回1