九度OJ 1208: 10進位制 VS 2進位制
阿新 • • 發佈:2019-01-07
#include <stdio.h> #include <stdlib.h> #include <string.h> void swap(int *p, int *q) { int temp; temp = *p; *p = *q; *q = temp; } void reverse(int arr[], int left, int right) { int i; for(i = left; i <= (left+right)/2; i++) swap(arr + i, arr + left + right - i); } /*將m進位制的大數X所在陣列arr_m[]轉換為n進位制陣列arr_n[],並求arr_n[]陣列的長度*/ void m_to_n(int arr_m[], int arr_n[], int m, int n, int m_len, int *pn) { *pn = 0; //arr_n陣列長度清0 int i, j; for(i = 0; i < m_len;) //不斷地將X除以n,並將餘數存入arr_n[],直到X為0 { int r = 0; //餘數清0 for(j = i; j < m_len; j++) //將大整數除以n,餘數存入r { int temp = arr_m[j] + m * r; r = temp % n; arr_m[j] = temp / n; } arr_n[(*pn)++] = r; //將餘數r對應的字元寫入n陣列 while(arr_m[i] == 0) //略過為0的高位 i++; } reverse(arr_n, 0, *pn - 1); //將arr_n[]逆置 } int main() { char s[1010]; int dec[1010] = {0}; int bin[4000] = {0}; while(gets(s) != NULL) { int dec_len = strlen(s); int bin_len = 0; int *pd = &dec_len; int *pb = &bin_len; int i; for(i = 0; i < dec_len; i++) //將讀入的字串轉換為整數陣列 dec[i] = s[i] - '0'; m_to_n(dec, bin, 10, 2, dec_len, pb); reverse(bin, 0, bin_len - 1); m_to_n(bin, dec, 2, 10, bin_len, pd); for(i = 0; i < dec_len; i++) printf("%d", dec[i]); printf("\n"); } //system("pause"); return 0; } /************************************************************** Problem: 1208 User: superlc320 Language: C++ Result: Accepted Time:50 ms Memory:1020 kb ****************************************************************/