当前位置: 首页 > 知识库问答 >
问题:

你将如何编写一个程序来检查一个数字是否是卡普雷卡?

羊舌迪
2023-03-14

我正在编写一个程序来检查用户输入的数字是否是卡普雷卡数(一个正方形的数字可以拆分并相加以获得原始数字),但是我只能编写一个只适用于1的程序

                double kaprekarNum = 0;
                Console.Clear();
                Console.WriteLine("Kaprekar Finder");
                Console.WriteLine("---------------");
                Console.WriteLine("Enter a number: ");
                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);
                }
                Console.ReadKey();

正如你所看到的,程序正在将数字拆分为1位数字,这不是我想要的。我需要把它分解成各种可能的方式,然后再加起来,但我不知道如何处理这个问题。你会怎么做?

共有1个答案

司寇阳曦
2023-03-14

我会避免使用双代码。这里有一个简单的实现。我认为你犯了一个错误,在你的字符串上循环,而不是把它切成左右段:

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;
 类似资料:
  • rank ▲ ✰ vote url 41 487 108 705 url 检查一个字符串是否是一个数字 如果一个字符串可以被看做一个数字那么有什么好的方法可以检测出来? 我能想到的方法: def is_number(s): try: float(s) return True except ValueError: return Fals

  • 例如,243是3的完美幂,因为243=3^5。 我以前一直在使用,我认为它工作得很好,但后来我用上面的示例尝试了它,由于浮点运算,它实际上返回了4.99999999999。所以它只适用于非常小的数字,我发现不到大约100个。 我想我可以用一个循环来重复乘法。。。i、 将i设置为3,然后设置为9,然后设置为27,然后设置为81,然后设置为243,这等于目标值,所以我们知道这是一个完美的幂。如果它达到

  • 检查一个字符串是否大写。 将给定的字符串转换为大写,使用 String.toUpperCase() 并将其与原始值进行比较。 const isUpperCase = str => str === str.toUpperCase(); isUpperCase('ABC'); // true isLowerCase('A3@$'); // true isLowerCase('aB4'); // fa

  • 问题内容: 我需要测试从1到1000的每个数字是3的倍数还是5的倍数。我认为我要这样做的方式是将数字除以3,如果结果是整数,则它将是3的倍数。与5相同。 如何测试数字是否为整数? 这是我当前的代码: 问题答案: 您可以使用模运算符执行此操作, 当且仅当是的精确倍数时,计算结果为true 。在小学数学中,这被称为除法运算的余数。 在您当前的方法中,您执行除法,结果将是 如果使用整数除法,则始终为整数

  • 在JavaScript中,如果窗口大小大于500px,我会告诉浏览器做些什么。我是这样做的: 这很有效,但我想用同样的方法,但有一系列的数字。所以我想告诉我的浏览器,如果窗口大小在500px到600px之间,我就去做一些事情。我知道这是行不通的,但我是这么想的: 在JavaScript中,这可能吗?

  • 我知道Sieve的算法,直到现在我一直在用它来得到高达10亿的素数。 但现在我需要知道一个10位数是素数还是不是素数,而Sieve的算法无法在时间限制内计算出来。 我搜索了很多,找到了费马的素数检验,但它没有成功,因为有些部分我不能理解,而有些部分告诉我,它只是通过一些迭代来判断它是不是可能的素数。 我想知道,在1秒左右的时间内,如何测试一个这么大的数是否为素数?最有效的解决方案/算法是什么? 编