任意進製轉換算法
#include <stdio.h> /************************************************************************/ /* 功能:實現任意進製之間的轉換 /* 參數:pSrc--指向源進製數,字符數組存放 /* pDst--指向轉換完成後的進製數,以字符數組形式存放 /* src --源進製數的進製類型,如十進製數的src值為10 /* dst --需要轉換成的進製類型 /************************************************************************/ void Convert(char *pSrc, char *pDst, long src, long dst) { long i, j, k, t, number = 0; char temp; for (i = 0; pSrc[i] != '\0'; i++) { if (pSrc[i] >= '0' && pSrc[i] <= '9') // 如果是數字 { t = pSrc[i] - '0'; } else // 否則就是字母 { t = pSrc[i] - 'A' + 10; } number = number * src + t; // 將源進製數組轉換成十進製數 } i = 0; while (number) // 進行進製轉換 { t = number % dst; if (t >= 0 && t <= 9) // 如果是數字 { pDst[i++] = t + '0'; } else // 那麼就是字母 { pDst[i++] = t + 'A' - 10; } number /= dst; } // 將轉換完成的進製數按自然順序排放 for (j = 0, k = i - 1; k >= j; j++, k--) { temp = pDst[j]; pDst[j] = pDst[k]; pDst[k] = temp; } pDst[i] = '\0'; } int main() { char s1[1000], s2[1000]; long src, dst; while (scanf("%s%ld%ld", s1, &src, &dst) != EOF) { Convert(s1, s2, src, dst); printf("%s\n", s2); } return 0; }
最後更新:2017-04-03 18:52:05