牛客網——C++進制轉換【完整分析加代碼】

一,題目描述
給定一個十進制數M,以及需要轉換的進制數N。將十進制數M轉化爲N進制數
輸入描述:

輸入爲一行,M(32位整數)、N(2 ≤ N ≤ 16),以空格隔開。

輸出描述:

爲每個測試實例輸出轉換後的數,每個輸出佔一行。如果N大於9,則對應的數字規則參考16進制(比如,10用A表示,等等)

示例1

輸入

7 2

輸出

111

二,程序分析

看到此題,如果對進制不太清楚的話,我們肯定一般不會有什麼想法,但是,大家可以看一下我的思路,應該很快就能看懂。

1首先,我們創建兩個字符串,一個是保留計算結果的,一個是存入最高的進位制0-F;
2然後,在添加兩個整數m,n,一個是輸入值,一個是進位制。
3 , 其次,我們先判斷m爲大於0的數值,如果不是,將負數轉化爲正數,然後,我們將【m%n】的值作爲進制數存入的第一個字符串中。再將【 m/n】
的結果作爲下一次【m%n】的m值。進行計算。
4,最後,因爲開始的時候數是負數,我們將他變成正數進行計算,所以添加負號 “-” ,來表示之前的數進位制。

三,程序代碼

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
	//首先,創建兩個字符串,一個保留進位制,一個爲最高16進制的位數0-F
	string str, table = "0123456789ABCDEF";
	int m, n;
	cin >> m >> n;
	bool falg = false;
	//當m爲負數時,先將他變成正數
	if (m < 0)
	{
		m = 0 - m;
		falg = true;
	}
	//將m的數值通過模取餘數的方法放到str字符串中
	while (m)
	{
		str += table[m%n];
		//再通過除法,取出商,然後循環
		m /= n;
	}
	if (falg)
		str += '-';
	//因爲這裏算出來的是正序的,但是我們需要的是反序的數字串,在通過反序的方法進行打印
	reverse(str.begin(), str.end());
	cout << str << endl;
	return 0;
}

四,運行過程
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章