输入一个整数(正负都可以)如何判断其位数

IMSIB 2010-04-16 12:04:42
大家好,输入一个整数(正负都可以)如何判断其位数
...全文
1146 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexhilton 2010-04-22
  • 打赏
  • 举报
回复
把它作为字串来输入。
其实所有的输入都是以字串形式的!其他所有的形式都IO函数自已转的
johnelf 2010-04-22
  • 打赏
  • 举报
回复
用sprintf也可以,这是转换到字符串的做法
johnelf 2010-04-22
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{
long a;
int len = 0;

cin>>a;

if (a < 0)
{
a = -a;
}

while(a > 0)
{
a /= 10;
len++;
}

cout<<"Length is:"<<len<<endl;

return 0;

}

首先计算机的数字类型有长度限制,你要从整数输入,所以必须有上限限制,要是字符串的话就很方便了。
十八道胡同 2010-04-22
  • 打赏
  • 举报
回复
把这个数sprintf到char *数组里面,直接这个数组的长度即可
renzhewh 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zhao4zhong1 的回复:]
没有放之四海而皆准的真理!
我输入一亿亿个1,谁能编程返回这个整数的位数是一亿亿?
[/Quote]

只要你能输入这个大数,肯定有人能求出位数
赵4老师 2010-04-19
  • 打赏
  • 举报
回复
没有放之四海而皆准的真理!
我输入一亿亿个1,谁能编程返回这个整数的位数是一亿亿?
renzhewh 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lingxuwaltz 的回复:]
引用 3 楼 dubiousway 的回复:
#include <math.h>


C/C++ code


int i=10000,n;
i=i>=0?i:-i;
n=int( log10(i)+1);


这个不错
[/Quote]

这个同样存在问题, i为最小的负数时,-i 仍是负数
arong1234 2010-04-18
  • 打赏
  • 举报
回复
log也一样,效率一定比几次比较差[Quote=引用 20 楼 arong1234 的回复:]
我估计无论哪种方法,都没有几次if-else效率高,虽然看起来似乎代码多几行,但是我相信运算量绝对比转换成字符串然后判断长度要小不是一个量级
[/Quote]
arong1234 2010-04-18
  • 打赏
  • 举报
回复
我估计无论哪种方法,都没有几次if-else效率高,虽然看起来似乎代码多几行,但是我相信运算量绝对比转换成字符串然后判断长度要小不是一个量级
xushuai0794 2010-04-18
  • 打赏
  • 举报
回复
对10求余
dubiousway 2010-04-16
  • 打赏
  • 举报
回复
#include <math.h>



int i=10000,n;
i=i>=0?i:-i;
n=int( log10(i)+1);

selooloo 2010-04-16
  • 打赏
  • 举报
回复
只用于整数范围内的输入

#include <stdio.h>
#include <string.h>

int main(void)
{
int n;
char str[32]={};

puts("Input a integer:");
gets(str);
sscanf(str,"%d",&n);
printf("%d length: %d",n,str[0]=='-'?(strlen(str)-1):strlen(str)) ;
getchar();
return 0;
}
brookmill 2010-04-16
  • 打赏
  • 举报
回复
for (result = 0; n; result++, n/=10)
;
tianma2005123 2010-04-16
  • 打赏
  • 举报
回复
&0xFFFFFFFF,bit7-bit0,如果为bit7,则位数为8位,为bit0则为1位
XLL19880206 2010-04-16
  • 打赏
  • 举报
回复
就能这个整数当做一个字符串读入,第一位是“-”,位数等于长度-1;否则的话,位数等于长度。
赵4老师 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 renzhewh 的回复:]
用于判断整数
int i;
char strNum[20];
int len = sprintf(strNum, "%d", (i<0)?-i:i);
[/Quote]
顶!
IMSIB 2010-04-16
  • 打赏
  • 举报
回复
谢谢楼上各位
EricFight 2010-04-16
  • 打赏
  • 举报
回复
自定义max,只要长度小于max的都能算出其长度,还能去除整数前面的'0'。如001也就是1,只有1位数。

#include<stdio.h>
#include<string.h>
#define max 100
int main()
{
char num[max];
int i;
gets(num);
for(i=0;num[i]=='-'||num[i]=='0';)i++;
printf("%d\n",strlen(num)-i);
return 0;
}
zht_304 2010-04-16
  • 打赏
  • 举报
回复
我想到的是除10,
xyufeng1989 2010-04-16
  • 打赏
  • 举报
回复

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

int num(int iValue) //iValue > 0
{
int iNum = 0;

while(iValue)
{
iNum ++;
iValue /= 10;
}

return iNum;
}

int main()
{
int value;
printf("Please enter an integer:\n");
scanf("%d", &value);

printf("The number bits of the input value is:\n");
printf("%d\n", num(abs(value)));

return 0;
}

这样会不会好看一点呢
加载更多回复(8)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧