返回题解分享
讨论 / 题解分享/ 帖子详情

立方变自身(结果填空) - 题解

#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define LL long long
#define endl '\n'

bool check(int n)
{
	int tmp = n;
	vector<int> v;
	while (tmp > 0)
	{
		v.push_back(tmp % 10);
		tmp /= 10;
	}

	double sum = 0;
	for (int j = 0; j < v.size(); j++) sum += v[j];

	if (sum == (n / sum / sum / 1.0)) return true;
	else return false;
}

void solve()
{
	int cnt = 0;
	for (int i = 1; i <= 10000; i++)
	{
		int x = pow(i, 3);
		if (check(x)) cnt++;
	}
	cout << cnt << endl;
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	solve();

	return 0;
}
3 回复 0 转发 0 喜欢 485 阅读
回复 (3)
默认 最新
露米 2026/5/19
看到这份题解,感觉思路很清晰呢。把逻辑拆分成 checksolve 两个部分,代码的可读性非常好。

check 函数里,你通过连续除法来验证立方关系,思路挺巧妙的。不过在实际处理时,如果尝试用 sum * sum * sum == n 这样的乘法形式,不仅更直观,也能避开浮点数除法可能带来的精度风险。另外,pow 函数在处理大整数时偶尔会有微小的偏差,直接用 i * i * i 往往会更稳健一些。

这种题目很考验对细节的把控,能顺利跑出结果已经很棒了。如果想让代码更轻巧一点,也可以考虑在拆分数字的同时直接累加求和,这样就不需要用到 vector 存储了。

关于 10000 这个循环上限,你是通过题目要求推导出来的吗?🙂
期待你的分享,我们可以一起交流看看。加油。
0
露米 2026/2/28
看到这份题解,感觉思路很清晰呢。把数字拆分和逻辑判断分开处理,代码读起来非常顺畅。

check 函数里,你用了浮点数除法来验证关系,其实这里可以尝试直接用 sum * sum * sum == n 来进行校验。这样不仅更直观一些,也能避开浮点数计算可能带来的精度小风险,写起来也会更稳健。

这种题目很考验细心程度,能写出完整的验证逻辑已经很棒了。另外,代码中 pow 函数返回的是浮点型,在处理较大整数时,直接用 i * i * i 可能会更稳妥一些。

如果之后遇到更大范围的数据,你觉得在拆分数字这一块还有哪些可以尝试的优化方法吗?🙂

期待看到你的更多思路,慢慢来就好。
0
露米 2026/2/19
看到这份题解,感觉思路很清晰呢。把数字拆分和逻辑判断分开处理,代码读起来非常顺畅。

check 函数里,你用了浮点数除法来验证关系,其实这里可以尝试直接用 sum * sum * sum == n 或者判断 sum == i 来进行校验。这样不仅更直观一些,也能避开浮点数计算可能带来的精度小风险,写起来也会更稳健。

这种题目很考验细心程度,能写出完整的验证逻辑已经很棒了。如果之后遇到更大范围的数据,你觉得在拆分数字这一块还有哪些可以尝试的优化方法吗?🙂
另外,代码中 pow 函数返回的是浮点型,在处理较大整数时,直接用 i * i * i 可能会更稳妥一些。

期待看到你的更多思路,慢慢来就好。
0