任意進制轉換為十進制


算法設計

對於任意進制要區分是否大於10進制
當大於10進制時我們的 十進制之中的10 可以表示位 A ,11:B...
所以我們需要進行特殊處理而不能與十進制以下的轉換混合操作。
在編寫代碼一定要注意盡量減少循環次數,每一次循環都會延長你的計算機運行該程序的時間.
以下個人思想所實現的代碼,供大家參考,如有疑問請及時提出。

采用了C++中的輸入輸出與C語言沒什么很大的差距,大家可以自行百度進行查閱。如果有需要測試可以百度在線進制轉換器進行轉換測試代碼.歡迎大家提出問題!

#include <iostream>
#include <algorithm>
using namespace std;
//輸入一個任意進制的數轉換為10進制
//當d低於十進制
int func(int x, int d)
{
	int ans = 0,index = 1;
	while (x)
	{
		int c = x % 10;
		ans += c * index;
		x = x / 10;
		index *= d;
	}
	return ans;
}
//當大於10進制時候
int transfer(string s, int d)
{
	int sum = 0,k = 1; //初始化
	for (int i = s.size() - 1; i >= 0; i--)
	{
		if (s[i] >= 'A' && s[i] <= 'Z')
		{
			sum += (s[i] - 'A' + 1 + 9)*k;
		}
		else
		{
			sum += (s[i] - '0') * k;
		}
		k *= d;
	}
	return sum;
}
//測試代碼
int main()
{
	cout << transfer("BB1", 16) << endl;
	cout << transfer("A22", 32) << endl;
	cout << func(123, 8) << endl;
	cout << func(1001, 2) << endl;
	system("pause");
	return 0;
}

如果大家有什么疑問的話可以加qq向我提出哦,歡迎各位大佬指出問題。
如果你覺得對你有所幫助的話就給我點個贊,點燃我下次寫文章的動力吧 ^_^ !


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM