| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1237 人关注过本帖
标题:重金悬赏,如何判断一个整数有多少位???(暂时不用考虑超大整数的问题)
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:12 
重金悬赏,如何判断一个整数有多少位???(暂时不用考虑超大整数的问题)
程序代码:
#include <stdio.h>
#include <math.h>
#include <string.h>

int nbits_1(int source)
{
    int bit=0;
    while(source)
    {
        source/=10;
        bit++;
    }
    return bit;
}

int nbits_2(int source)
{
    return (int)log10((double)source)+1;
}

int nbits_3(int source)
{
    char t[20]={'\0'};
    sprintf(t,"%d",source);
    return (int)strlen(t);
}

int nbits_3_1(int source)
{
    char t[20]={'\0'};
    return sprintf(t,"%d",source);
}

int nbits_3_2(int source)
{
    return printf("%d",source);
}

int nbits_4(int source)
{
    int count=1;
    while (source/(int)pow(10.00,count)>=1) count++;
    return count;
}

int nbits_5(int source)
{
    if(source>=0 && source<10) return 1;
    if(source>=10 && source<100) return 2;
    if(source>=100 && source<1000) return 3;
    if(source>=1000 && source<10000) return 4;
    if(source>=10000 && source<100000) return 4;
    if(source>=100000 && source<1000000) return 6;
    //............
}

int main(void)
{
    int  p=888999;
    printf("1.bits=%d\n",nbits_1(p));
    printf("2.bits=%d\n",nbits_2(p));
    printf("3.bits=%d\n",nbits_3(p));
    printf("3_1.bits=%d\n",nbits_3_1(p));
    printf("3_2.bits=%d\n",nbits_3_2(p));
    printf("4.bits=%d\n",nbits_4(p));
    printf("5.bits=%d\n",nbits_5(p));
    return 0;
}


我不知道利用位运算 是否能弄出来  是否还有其他的方法

[ 本帖最后由 wp231957 于 2014-7-24 10:29 编辑 ]
搜索更多相关主题的帖子: source 如何 
2014-07-24 10:20
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
收藏
得分:15 
这样可以么?
char strBuffer[128] = {'\0'};
     sprintf(strBuffer, "%d", p);
     printf("length = %d\n", strlen(strBuffer));



~~~~~~我的明天我知道~~~。
2014-07-24 10:26
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 2 楼 xufan
我写的
int nbits_3(int source)
{
    char t[20]={'\0'};
    sprintf(t,"%d",source);
    return (int)strlen(t);
}

这个和你的貌似一样的吧

DO IT YOURSELF !
2014-07-24 10:28
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:15 
程序代码:
#include <stdio.h>

#define MAX_BITS 32

int main(void)
{
    unsigned int num = 0;
    unsigned int mask = 1 << (MAX_BITS - 1);
    int bits = 0;
   
    scanf("%d", &num);
    if (num == 0)
    {
        printf("It's zero.\n");
        return 0;
    }
    while (bits < MAX_BITS)
    {
        if ((num & mask) != 0)
        {
            printf("%d has %d bits.\n", num, (MAX_BITS - bits));
            return 0;
        }
        else
        {
            bits++;
            mask >>= 1;
        }
    }
    return 0;
}


感冒了 很难受 顺手写的 我试了几个简单的 是对的

思路就是找最高位 知道最高位 又知道变量的大小 也就知道到底有多少位了 但这里对负数没考虑 如果考虑的话要排除符号位

好像有一条CPU指令就是专门干这个的 找第一个1 但C语言里好像也只能这么写了
2014-07-24 10:59
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:15 
楼上厉害
2014-07-24 11:19
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:15 
回复 4 楼 zklhp
楼主问的是十进制位数。不是二进制位数。
2014-07-24 11:38
hzliyilong
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2014-7-21
收藏
得分:15 
程序代码:
for(i=10;i>=0;i--)
        {
            a[i]=(long int)need/pow(10,i);
            //分出need的每一位数
            need=need-a[i]*pow(10,i);
        }
for(i=10;i>=0;i--)
        {
            if(a[i]!=0) {bit=i+1;i=0;}
            //求取数字的位数
        }
2014-07-24 11:56
步向巅峰
Rank: 5Rank: 5
来 自:河南
等 级:贵宾
威 望:17
帖 子:110
专家分:371
注 册:2013-4-26
收藏
得分:15 
程序代码:
#include<stdio.h>
int bit(int n)
{
    int b=0;
    while(n>0)
    {
        n=n/10;
        b++;    
    }
    return b;
}
int main()
{
    int num;
    printf("请输入一个正整数:");
    scanf("%d",&num);
    printf("%d是%d位数\n",num,bit(num));
    return 0;
}

我想如果我没理解错的话,这样应该就可以了,各位是不是想的太复杂了,直接利用精度损失就可以了
2014-07-24 14:19
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用pangshch在2014-7-24 11:38:51的发言:

楼主问的是十进制位数。不是二进制位数。

我也没看楼主的代码 就看到了bit这个词
2014-07-24 15:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 8 楼 步向巅峰
我在主贴中已经列举了7种实现方案  其中就包含你的办法

我只是想知道是否还有其他办法了

DO IT YOURSELF !
2014-07-24 16:47
快速回复:重金悬赏,如何判断一个整数有多少位???(暂时不用考虑超大整数的问 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019815 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved