尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。

include "stdafx.h"

#include<iostream>
#include<vector>
#include <algorithm>  
#include<iomanip>
#include<string>
#include<numeric>
#include<set>

using namespace std;

int toNum(int num, int i)
{
	int sum = 0;
	while (num!=0)
	{
		sum += (num%i);
		num = num / i;
	}
	return sum;
}

void getNum(int n, int m)
{
	for (int i = m; i > 1; i--)
	{
		if (n%i == 0 && m%i==0) 
		{
			n = n / i;
			m = m / i;
			break;
		}
	}
	cout << n << "/" << m << endl;
}

int main()
{
	int n;
	while (cin>>n)
	{
		float sum = 0;
		for (int i = 2; i < n; i++)
		{
			sum += toNum(n,i);
		}
		getNum(sum,n-2);
	}
	
	
	
}
原文地址:https://www.cnblogs.com/wdan2016/p/6852397.html