最後一個1【進位制轉換】
阿新 • • 發佈:2018-11-25
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;
}