我对一个问题有疑问 显示数字的平方是否是n的右数加n或n-1左数的总和? 或
let n=297
n*n=88209
and 88+209=n
什么是解决此问题的算法请帮忙
答案 0 :(得分:1)
可能会将原始数字的平方转换为字符串,然后您可以将该字符串的部分转换为整数并添加它们。为分割索引位置存储一个int,并迭代每个索引分割位置进行测试。
当然还有很多其他方法可以做到。
答案 1 :(得分:0)
这是使用整数而非字符串快速进行从右到左扫描测试的单个数字。未经测试:
int left_digits = n*n;
int right_digits = 0;
int next_right_digit_multiplier = 1;
while ((left_digits > 0) && (right_digits < n))
{
if ((left_digits + right_digits) == n)
{
return true;
}
int next_digit = left_digits % 10;
left_digits /= 10;
right_digits += (next_digit * next_right_digit_multiplier);
next_right_digit_multiplier *= 10;
}
return false;
请注意,如果您开始使用非常大的数字,例如在这里找到一些理论可能会更好。只测试中心的少数情况,其中任何一方都没有比n更多的数字(忽略前导零!)。