吔,哼,哼,啊啊啊啊啊啊啊啊啊啊
查看原帖
吔,哼,哼,啊啊啊啊啊啊啊啊啊啊
1213524
C_plus_plus_12345楼主2024/11/28 22:22

代码:

#include <iostream>
#include <cmath>

// 将给定进制数num转换为十进制数
int convertToDecimal(int num, int base)
{
	int decimal = 0;
	int power = 1;
	while (num > 0)
	{
		int digit = num % 10;
		if (digit >= base)
		{
			return -1; // 数字在给定进制下无效
		}
		decimal += digit * power;
		num /= 10;
		power *= base;
	}
	return decimal;
}

// 检查p * q == r是否在给定的进制base下成立
bool isValidBase(int p, int q, int r, int base)
{
	int pDec = convertToDecimal(p, base);
	int qDec = convertToDecimal(q, base);
	int rDec = convertToDecimal(r, base);

	if (pDec == -1 || qDec == -1 || rDec == -1)
	{
		return false; // 任意一个数在给定进制下无效
	}

	return (pDec * qDec == rDec);
}

int findMinBase(int p, int q, int r)
{
	int minBase = 2; // 最小的可能进制为2(二进制)

	while (true)
	{
		if (isValidBase(p, q, r, minBase))
		{
			return minBase; // 找到满足条件的最小进制
		}

		minBase++;

		// 设置一个上限来防止无限循环(虽然理论上进制数可以无限大,但实际应用中需要限制)
		if (minBase > 100)   // 可以根据需要调整这个上限值
		{
			break;
		}
	}

	return 0; // 没有找到满足条件的进制
}

int main()
{
	int p, q, r;
	std::cin >> p >> q >> r;

	int result = findMinBase(p, q, r);
	std::cout << result << std::endl;

	return 0;
}

结果 9090 分,两个答案错误,救命

2024/11/28 22:22
加载中...