1. 程式人生 > >九度 oj 題目1208:10進位制 VS 2進位制

九度 oj 題目1208:10進位制 VS 2進位制

參考了

根據參考1有

#include <cstdio>
#include <cstring>
#define MAXN 4000

int main(){ 
    int to[MAXN];
    int from[MAXN]; 
    char str[1000];
    while(scanf("%s",str) !=EOF ){ 
        int len = (int)  strlen(str);  
        for (int i = 0; i < len; ++i) { 
            from[i] = str[i] - '0'; 
        } 

        int toLen = 0;
        while(true){ 
            int i = 0; 
            while(i<len&&from[i] == 0) i++; 
            if(i==len) break; 
            int remainder = 0;
            for (; i < len; i++) { 
                int temp = remainder*10+from[i]; 
                from[i] = temp/2;
                remainder = temp%2;
            } 
            to[toLen++] = remainder;

        }  

        if(toLen == 0){ 
            printf("0\n");  
        }else{ 
            int newLen = 1;
            memset(from,0,sizeof(from) ); 
            for (int i = 0; i < toLen; ++i) { 
                for (int j = 0;  j< newLen; ++j) { 
                    from[j] *= 2; 
                } 
                if(to[i]) from[0]+=to[i];
                int c = 0;
                for (int j = 0; j < newLen; ++j) { 
                    from[j] += c;
                    if(from[j] >=10){ 
                        c = from[j]/10;
                        from[j] %=10; 
                    }else{ 
                        c = 0; 
                    }    
                } 

                while(c){ 
                    from[newLen++] = c%10;
                    c /=10; 
                }  
            } 
            for (int i = newLen-1; i >=0; i--) { 
                printf("%c",from[i]+'0');  
            } 
            printf("\n"); 
        }    
    }  
}  


根據參考2有:

#include <cstdio>
#include <cstring>
#define MAXN 4000

int main(){ 
    int to[MAXN];
    int from[MAXN]; 
    char str[1000];
    while(scanf("%s",str) !=EOF ){ 
        int len = (int)  strlen(str);  
        for (int i = 0; i < len; ++i) { 
            from[i] = str[i] - '0'; 
        } 

        int toLen = 0;
        while(true){ 
            int i = 0; 
            while(i<len&&from[i] == 0) i++; 
            if(i==len) break; 
            int remainder = 0;
            for (; i < len; i++) { 
                int temp = remainder*10+from[i]; 
                from[i] = temp/2;
                remainder = temp%2;
            } 
            to[toLen++] = remainder;

        }  

        if(toLen == 0){ 
            printf("0\n");  
        }else{
            int newLen = 0;
            while(true){ 
               int i = 0;  
               while(i<toLen && to[i] == 0) i++;
               if(i == toLen) break;  
               int remainder = 0;
               for(;i<toLen;i++){ 
                  int temp  = remainder*2 + to[i];  
                  to[i] = temp/10;
                  remainder = temp%10;
               }  
               from[newLen++] = remainder;
            }  
            for (int i = newLen-1; i >=0; --i) { 
                printf("%c",from[i]+'0');  
            } 
            printf("\n"); 
        } 
    }  
}  

我覺得由參考2得到的方法更好,因為統一。

相關推薦

oj 題目120810 VS 2

參考了 根據參考1有 #include <cstdio> #include <cstring> #define MAXN 4000 int main(){ int to[MAXN]; int from[MAXN];

OJ 題目1204農夫、羊、菜和狼的故事

pla pan wol 題目 r+ ear play struct tab 思路:廣度 優先 記錄路徑長度 但是題目的意思好像是要記錄具體路徑 下次再搞吧 題目描述: 有一個農夫帶一只羊、一筐菜和一只狼過河.果沒有農夫看管,則狼要吃羊,羊要吃菜.但是船很小,只

OJ-題目1009二叉搜索樹

提交 二叉排序樹 軟件 amp cpp creat .com xheditor ear 題目1009:二叉搜索樹 從如今開始打算重新啟動刷題征程。程序猿的人生不須要解釋! 這次撇開poj hoj等難度較大的oj系統,從九度入手(已經非常長時間沒寫過代碼

OJ-題目1009二叉搜尋樹

題目1009:二叉搜尋樹         從現在開始打算重啟刷題征程。程式設計師的人生不需要解釋! 這次撇開poj hoj等難度較大的oj系統,從九度入手(已經很長時間沒寫過程式碼了),主要先“叫醒” 沉睡依舊的大腦。唉~真的很長時間沒寫部落格,沒寫程式碼了,只能加油吧!

OJ題目1089數字反轉

題目描述:     12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,現在又任意兩個正整數,問他們兩個數反轉的和是否等於兩個數的和的反轉。 輸入:     第一行一個正整數表示測試資料的個數n。     只有n行,每行兩個正整數a和b(0<a,b<=10000)。 輸出

OJ 題目1014排名

題目描述:     今天的上機考試雖然有實時的Ranklist,但上面的排名只是根據完成的題數排序,沒有考慮每題的分值,所以並不是最後的排名。給定錄取分數線,請你寫程式找出最後通過分數線的考生,並將他們的成績按降序列印。 輸入:     測試輸入包含若干場考試的資訊。每場

OJ題目1201二叉排序樹

紀念一下終於在二叉樹上的程式碼準確率,但還是在給root分配空間的時候忘記要寫了  悲劇 還沒看到提示要考慮忽略重複元素,這個好解決 題目描述:     輸入一系列整數,建立二叉排序數,並進行前

OJ-題目1521二叉樹的映象

題目連結地址: 題目描述: 輸入一個二叉樹,輸出其映象。 輸入: 輸入可能包含多個測試樣例,輸入以EOF結束。 對於每個測試案例,輸入的第一行為一個整數n(0<=n<=1000,n代表將要輸入的二叉樹節點的個數(節點從1開始編號)。接下來一行有n個數字,

OJ-題目1019簡單計算器

題目描述:     讀入一個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值。 輸入:     測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用一個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果

OJ-題目1214醜數

題目連結地址: 題目描述:把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。 輸入:輸入包括一個整數N(1<=N<=1500)。 輸

OJ題目1047素數判定

時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 題目描述: 給定一個數n,要求判斷其是否為素數(0,1,負數都是非素數)。 輸入: 測試資料有多組,每組輸入一個數n。 輸出: 對於每組輸入,若是素數則輸出yes,否則輸入no。 樣例輸入: 13 樣例輸出: yes #include

oj 題目1008最短路徑問題

這道題告訴我們 INT_MAX, 慎用,dijkstra 有時加溢位了,你都不知道 #include <cstdio> //#include <climits> #include <algorithm> using namespace

OJ 題目1008最短路徑問題 (Dijstra 演算法)

題目描述: 給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。 輸入: 輸入n,m,點的編號是1~n,然後是m行,每行4個數 a,b,d,p,表示a和b之間有一條邊,且其長度為

OJ 題目1126列印極值點下標

 一.題目描述: 在一個整數陣列上,對於下標為i的整數,如果它大於所有它相鄰的整數,  或者小於所有它相鄰的整數,則稱為該整數為一個極值點,極值點的下標就是i。 輸入: 每個案例的輸入如下: 有2×n+1行輸入:第一行是要處理的陣列的個數n;  對其餘2×n行,第一

OJ-題目1163素數

題目描述: 輸入一個整數n(2<=n<=10000),要求輸出所有從1到這個整數之間(不包括1和這個整數)個位為1的素數,如果沒有則輸出-1。 輸入: 輸入有多組資料。 每組一行,輸入n。 輸出: 輸出所有從1到這個整數之間(不包

OJ題目1067n的階乘

題目描述: 輸入一個整數n,輸出n的階乘 輸入: 一個整數n(1<=n<=20) 輸出: n的階乘 樣例輸入: 3 樣例輸出: 6 #include <stdio.h> #include <string.h> #include <stdlib.h>

OJ-題目1509樹中兩個結點的最低公共祖先

題目連結地址: 題目描述:給定一棵樹,同時給出樹中的兩個結點,求它們的最低公共祖先。 輸入:輸入可能包含多個測試樣例。對於每個測試案例,輸入的第一行為一個數n(0<n<1000),代表測試樣例的個數。其中每個測試樣例包括兩行,第一行為一個二叉樹的先序遍歷序列

OJ 題目1003A+B

一.題目描述: 給定兩個整數A和B,其表示形式是:從個位開始,每三位數用逗號","隔開。  現在請計算A+B的結果,並以正常形式輸出。 輸入: 輸入包含多組資料資料,每組資料佔一行,由兩個整數A和B組成(-10^9 < A,B < 10^9)。 輸出: 請

OJ題目1081遞推數列解題報告

題目分析1:一個很顯然的想法是遞推計算這k+1個數對10000的模,實現如下:原始碼1(TLE)#include <stdio.h>#include <stdlib.h>#define MOD 10000int main()  {      int a0, a1, p, q, k;  

OJ-題目1508把字串轉換成整數

題目連結地址: 題目描述:將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 輸入:輸入可能包含多個測試樣例。對於每個測試案例,輸入為一個合法或者非法的字串,代表一個整數n(1<= n<=10000000)。 輸出:對應每個測試案例,若輸入為一個合