版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}