求十進制數n的 2至 n-1進制的表達

/*假設數爲num, 進製爲n */

vector<int> transform(int num, int n)
{
vector<int> list;
while (num != 0)
{
int a = num % n;
num = num / n;
list.push_back(a);
}

return list;

}

例如:123    123%10 = 3, 123 / 10 = 12 ; 12%10=2,  12 / 10 = 2; 2%10 = 2, 2/10=0; 所以得到 3,2,1;別的進制依此而行;

改進題目1:

/*

儘管是一個CS專業的學生,小B的數學基礎很好並對數值計算有着特別的興趣,喜歡用計算機程序來解決數學問題,現在,她正在玩一個數值變換的遊戲。她發現計算機中經常用不同的進製表示一個數,如十進制數123表達爲16進制時只包含兩位數7、11(B),用八進制表示爲三位數1、7、3,按不同進製表達時,各個位數的和也不同,如上述例子中十六進制和八進制中各位數的和分別是18和11,。 小B感興趣的是,一個數A如果按2到A-1進製表達時,各個位數之和的均值是多少?她希望你能幫她解決這個問題? 所有的計算均基於十進制進行,結果也用十進制表示爲不可約簡的分數形式。

*/

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int transform(int num, int n)
{
	vector<int> list;
	int sum = 0;
	while (num != 0)
	{
		int a = num % n;
		num = num / n;
		list.push_back(a);
	}
	for (int i = 0; i < list.size(); i++)
	{
		sum += list[i];
	}
	return sum;
}

int gcd(int m, int n)
{
	int r = m % n;
	while (r != 0)
	{
		m = n;
		n = r;
		r = m % n;
	}
	return n;
}

int main_04()
{
	int A;
	while (cin >> A)
	{
		int sum = 0, div = A - 2;
		for (int i = 2; i < A; i++)
		{
			sum += transform(A, i);
		}
		cout << sum / gcd(sum, div) << "/" << div / gcd(sum, div) << endl;
	}

	return 0;
}

/*

小明同學學習了不同的進制之後,拿起了一些數字做起了遊戲。小明同學知道,在日常生活中我們最常用的是十進制數,

而在計算機中,二進制數也很常用。現在對於一個數字x,小明同學定義出了兩個函數f(x)和g(x)。 f(x)表示把x這個數用

十進制寫出後各個數位上的數字之和。如f(123)=1+2+3=6。 g(x)表示把x這個數用二進制寫出後各個數位上的數字之和。

如123的二進制表示爲1111011,那麼,g(123)=1+1+1+1+0+1+1=6。 小明同學發現對於一些正整數x滿足f(x)=g(x),他

把這種數稱爲幸運數,現在他想知道,小於等於n的幸運數有多少個?

  */

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int f(int num, int n)
{
	vector<int> list;
	int sum = 0;
	while (num != 0)
	{
		int a = num % n;
		num = num / n;
		list.push_back(a);
	}
	for (int i = 0; i < list.size(); i++)
	{
		sum += list[i];
	}
	return sum;
}

int main_05()
{
	int A;
	while (cin >> A)
	{
		int count = 0;
		for (int i = 1; i <= A; i++)
		{
			if (f(i, 10) == f(i, 2))
			{
				//cout <<i<<"  "<< f(i, 10) 
				//		<<"  "<< f(i, 2) << endl;
				count++;
			}
		}
		cout << count << endl;
	}
	return 0;
}


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