检查数字是不是为 Kaprekar
Posted
技术标签:
【中文标题】检查数字是不是为 Kaprekar【英文标题】:Checking If A Number Is Kaprekar检查数字是否为 Kaprekar 【发布时间】:2022-01-15 19:17:59 【问题描述】:我正在编写一个程序来检查用户输入的数字是否是 kaprekar 数字(可以将一个正方形的数字拆分并相加以获得原始数字)但是我只能编写一个真正只能工作的程序对于1 & 2
数字方块(1 & 1
和 9 & 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的主要内容,如果未能解决你的问题,请参考以下文章