检查数字是不是为 Kaprekar

Posted

技术标签:

【中文标题】检查数字是不是为 Kaprekar【英文标题】:Checking If A Number Is Kaprekar检查数字是否为 Kaprekar 【发布时间】:2022-01-15 19:17:59 【问题描述】:

我正在编写一个程序来检查用户输入的数字是否是 kaprekar 数字(可以将一个正方形的数字拆分并相加以获得原始数字)但是我只能编写一个真正只能工作的程序对于1 & 2 数字方块(1 & 19 & 81),这是我的代码:

double kaprekarNum = 0;
kaprekarNum = int.Parse(Console.ReadLine());

double kmSqr = Math.Pow(kaprekarNum, 2);
string kmSqrString = kmSqr.ToString();

double[] kmSqrDouble = new double[kmSqrString.Length];

for(int i = 0; i < kmSqrString.Length; i++)

    kmSqrDouble[i] = int.Parse(kmSqrString[i].ToString());
    kapTest = kapTest + kmSqrDouble[i];


if(kapTest == kaprekarNum)

    Console.WriteLine("0 is a kaprekar.", kaprekarNum);

else if(kapTest != kaprekarNum)

    Console.WriteLine("0 is not a kaprekar.", kaprekarNum);

如您所见,程序将数字分成 1 位数字,这不是我想要的。我需要它把它分成各种可能的方式,然后把它加起来,但我不知道该怎么做。你会怎么做呢?

【问题讨论】:

【参考方案1】:

我会避免使用double。这是一个简单的实现。我认为你犯了一个错误循环你的字符串,而不是把它分成左右两段:

int testNbr = 297;

//beware overflow potential
int testSqrd = testNbr*testNbr;

string testSqrdStr = testSqrd.ToString();

// The right-most testNbr.Length digits from the squared value
string right = testSqrdStr.Substring(testSqrdStr.Length - testNbr.ToString().Length);

// The left most remaining
string left = testSqrdStr.Substring(0, testSqrdStr.Length - right.Length);

int result = int.Parse(right) + int.Parse(left);

bool isKaprekar = testNbr == result;

【讨论】:

以上是关于检查数字是不是为 Kaprekar的主要内容,如果未能解决你的问题,请参考以下文章

检查值是不是为数字

检查数字是不是为素数

检查输入的数字是不是为奇数

在 C# 中检查对象是不是为数字

如何检查一个数字是不是为负数?

检查文本框内容是不是为数字[重复]