我对Kaprekar号码有疑问

时间:2010-06-11 13:41:57

标签: algorithm

我对一个问题有疑问        显示数字的平方是否是n的右数加n或n-1左数的总和? 或

let n=297
n*n=88209
  and 88+209=n

什么是解决此问题的算法请帮忙

2 个答案:

答案 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更多的数字(忽略前导零!)。