首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > VSTS >

十进制 VS 2进制 (九度oj)

2013-03-12 
10进制 VS 2进制(九度oj)题目AC代码#include stdio.h#include string.h#include stdlib.h #define T

10进制 VS 2进制 (九度oj)
题目




AC代码
#include <stdio.h>#include <string.h>#include <stdlib.h> #define TEN 2000#define TWO 4000 char A[TEN], B[TWO];int  C[TEN]; int divideToBinary();void multiplyToDecimal(int k); int main(){    int k;     while (scanf("%s", A) != EOF) {        k = divideToBinary();        multiplyToDecimal(k);    }     return 0;} int divideToBinary(){    int i, k, sum, len, d;     memset(B, 0, sizeof(B));    sum = 1;    len = strlen(A);    k = 0;     //转换为2进制    while (sum) {        sum = 0;         for (i = 0; i < len; i ++) {            d = (A[i] - '0') / 2;            sum += d;             if (i == len - 1) {                B[k ++] = (A[i] - '0') % 2 + '0';            }else {                A[i + 1] += (A[i] - '0') % 2 * 10;            }            A[i] = d + '0';        }    }    B[k] = '\0';     return k;}  void multiplyToDecimal(int k){    int i, j, c, len;     memset(C, 0, sizeof(C));    len = 1;     //搞清楚逆序后的关系,没有必要真正的逆序    for (i = 0; i < k; i ++) {        for (j = 0; j < len; j ++) {            C[j] *= 2;        }        C[0] += B[i] - '0';        for (j = c = 0; j < len; j ++) {            C[j] += c;            if (C[j] >= 10) {                c = C[j] / 10;                C[j] %= 10;            }else {                c = 0;            }        }        while (c > 0) {            C[j ++] = c % 10;            c /= 10;        }        len = j;    }         for (i = len - 1; i >= 0; i --) {        printf("%d", C[i]);    }    printf("\n");}/**************************************************************    Problem: 1208    User: wangzhengyi    Language: C    Result: Accepted    Time:50 ms    Memory:924 kb****************************************************************/

后记最近研究大数乘除法比较多,欢迎各位跟帖讨论!

热点排行