最后一个1【进制转换】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/windywo/article/details/48035075

1710: 最后一个1

时间限制: 1 Sec
内存限制: 128 MB
提交: 71 解决: 44
[提交][状态][讨论版]

题目描述
对于一个十进制的数字x,将他转化为2进制,他的2进制将由0和1组成,求里面的最后一个1在第几位

输入
第一行输入T,代表T组数据,

接下来T行,每行输入一个X。

0

#include<cstdio>
#include<cstring>
int main()
{
    int t,a,k,sum,b[40];
    scanf("%d",&t);
    while(t--)
    {
        memset(b,0,sizeof(b));
        scanf("%d",&a);
        k=0;
        if(a==0)
        {
            printf("0\n");
            continue;
        }
        while(true)
        {
            if(a==1)
            {
                b[++k]=1;
                break;
            }
            b[++k]=a%2;
            a/=2;
        }
        for(int i=1;i<=k;i++)
            if(b[i]==1)
            {
                printf("%d\n",k+1-i);
                break;
            }   
        /*for(int i=k;i>=0;i--)     
            printf("%d",b[i]);
        printf("\n\n");*/
    }
    return 0;
}
假设要转换的进制数为n

对于进制转换,那个十进制数除以n,将余数输入到一个数组中,再将上次除得的商除以n,同理将余数存入数组中,如此到商为0时停.将那个数组反向输出就是了

//十以内的进制转换 
#include<cstdio>
#include<cstring>
int main()
{
    int a,b[40],k,n;
    while(~scanf("%d%d",&a,&n))
    {
        k=0;
        while(true)
        {
            b[k++]=a%n;
            a/=n;
            if(a==0)
                break;
        }
        for(int i=k-1;i>=0;i--)
            printf("%d",b[i]);
        printf("\n");           
    }
    return 0;
}

//转换成十六进制 
#include<cstdio>
#include<cstring>
int main()
{
    int a,k;
    char b[40],c[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    while(~scanf("%d",&a))
    {
        k=0;
        while(true)
        {
            if(a==0)
                break;
            b[k++]=c[a%16];
            a/=16;
        }
        for(int i=k-1;i>=0;i--)
            printf("%c",b[i]);
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/windywo/article/details/48035075
今日推荐