1. 程式人生 > >最後一個1【進位制轉換】

最後一個1【進位制轉換】

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; }