閱讀482 返回首頁    go 阿裏雲 go 技術社區[雲棲]


任意進製轉換算法

#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

  上一篇:go Android 休眠狀態對Camera預覽的影響
  下一篇:go cf 274D Lovely Matrix 拓撲排序