在C编程中如何计算整数的长度?
请告诉我计算整数位数的最简单方法。 场景是,我将从用户那里获取一个长整数的输入。如果整数的长度等于11,则会显示一条消息成功,否则会显示一条错误消息。最后,如果它给出错误信息,我想中断程序,屏幕上不应显示其他指令 到目前为止,我已经用while和if语句尝试了下面的代码,程序确实运行了,但没有给出所需的输出在C编程中如何计算整数的长度?,c,C,请告诉我计算整数位数的最简单方法。 场景是,我将从用户那里获取一个长整数的输入。如果整数的长度等于11,则会显示一条消息成功,否则会显示一条错误消息。最后,如果它给出错误信息,我想中断程序,屏幕上不应显示其他指令 到目前为止,我已经用while和if语句尝试了下面的代码,程序确实运行了,但没有给出所需的输出 printf("Enter your Account Number :\n"); scanf("%ld", &accno); while(accno != 0) { ++c
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:数学 实际上,使用
log
函数(基数10),有一种数学上聪明的方法可以找到任意数字中的位数:
#包括
#包括
int numlen(无符号长n){
如果(n==0)返回1;
return(int)(ceil(log10((double)(n)));//很抱歉出现了多个铸件,因为ceil/log接收和返回都是双倍的
}
这个方法当然比较慢,但它在数学上很漂亮
编辑:我完全同意@chux的意见,即由于铸件和浮点精度问题,这种方法不是整数解决方案的最佳方法。然而,在国际海事组织看来,这仍然是解决这个问题的数学上最合适的方法
方法2:循环
int numlen(unsigned long long n){
int len = 0;
if(n<10) return 1;
while (n) {
n /= 10;
len++;
}
}
int numlen(无符号长n){
int len=0;
如果(n=1000000000&&nwhile(accno!=0){++count;}
是一个无限循环count=count;
。这是什么?int i=0;while((n/=10)>0)i++;
类似于this@SouravGhosh这是一个众所周知的技术,以防止…的影响,如果你得到了正确的时机,你采取旧的,正确的价值观(count
)然后在宇宙原始数据改变值后将其分配回原始变量:-)@EugeneSh。您可以选择是优化速度(-O3
)、大小(-Os
)还是宇宙射线保护(正在开发的-Ocrp
)。说得好!已编辑!问题是默认情况下,log10
接受一个double
,因此如果您不强制执行castingfacepalms-Edited Thanks,它有时会抛出一个错误。您是否需要关心其他详细信息:unsigned long n;…(double)(n/*不是x*/)
-->由于n
为64位,而double
通常超过54位,因此转换为9999999999999
与unsigned long
时会对大的n
进行四舍五入。因此n
转换为double
时正好变为1.0e+19,然后为1对整数问题使用FP-math往往会遇到许多毫无疑问的极端情况,对于整数问题最好避免。
int numlen(unsigned long long n){
int len = 0;
if(n<10) return 1;
while (n) {
n /= 10;
len++;
}
}
int isElevenDigits(unsigned long long n){
if(n>=10000000000 && n<=99999999999) return 1;
else return 0;
}