如何在C编程中计算整数的长度?

时间:2019-04-11 14:25:57

标签: c

请让我知道最简单的方法来计算整数位数。 场景是我将从用户处输入一个长整数。如果整数的长度等于11,则显示一条消息成功,否则显示一条错误消息。最后,如果出现错误消息,我想中断程序,屏幕上不应显示其他指令。

到目前为止,我已经尝试使用while和if语句在下面的代码中执行此操作,但程序确实在运行,但未提供所需的输出。

printf("Enter your Account Number :\n");
scanf("%ld", &accno);

while(accno != 0)
{
    ++count;
    }
    count = count;
if (count == 11){
        printf("You are existing customer of bank.");
    }else{
        printf("Sorry you are not a customer of our bank");
    }

1 个答案:

答案 0 :(得分:1)

方法1:数学

实际上,使用log函数(以10为基数),存在一种数学上聪明的方法来查找任意数字的数字:

#include<stdio.h>
#include<math.h>

int numlen(unsigned long long n){
     if(n==0) return 1;
    return (int)(ceil(log10((double)(n)))); //sorry for the multiple castings, as ceil/log both take in and return doubles
}

这种方法虽然速度较慢,但​​是在数学上很漂亮。

编辑:我完全同意@chux的评论,由于强制转换和浮点精度问题,此方法不是整数解决方案的最佳选择。但是,它仍然是解决问题的最数学上最合适的方式。

方法2:循环

int numlen(unsigned long long n){
    int len = 0;

    if(n<10) return 1;
    while (n) {
        n /= 10;
        len++;
    }
}

方法3:递归

有关基于递归的答案,请参阅@Rutendo答案

方法4:只需检查一下? (仅您的应用程序) 由于您只需要检查数字是否为11位数字,因此只需检查整数是否在10000000000和99999999999(含)之间即可。

int isElevenDigits(unsigned long long n){
     if(n>=10000000000 && n<=99999999999) return 1;
     else return 0;
}