c# - 找到由两个 3 位数字的乘积构成的最大回文 C#
问题描述
我试图用 C# 解决 projecteuler 4th 项目,但我没有收到正确的答案,我得到 90909。有人能发现我的错误吗?
问题是这样的:
回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 × 99。
找出由两个 3 位数字的乘积构成的最大回文数。
namespace Largest_palindrome_product{
class Program
{
static void Main(string[] args)
{
string Reverse(string s)
{
char[] charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
int result = 0;
string rev= "hello";
string palindrome = "hello";
string bingo = "hello";
int j = 1;
for (int i = 1; i< 1000; i++)
{
for (int y = 1; y< 1000; y++)
{
result = i * y;
bingo = result.ToString();
rev = Reverse(bingo);
j = int.Parse(bingo);
}
if (rev == bingo)
{
palindrome = bingo;
}
}
Console.Write(palindrome);
Console.Read();
}
}
}
解决方案
我认为造成如此多混乱的原因是使用String
它只会使必须来回转换它们的事情变得复杂。
if
只要您检查了新数字更大,您的程序就可以正常工作(如果根据约翰的评论移动了)!
这是我的看法:
// stolen from https://www.geeksforgeeks.org/reverse-digits-integer-overflow-handled/
int Reverse(int num)
{
int rev_num = 0;
while (num > 0)
{
rev_num = rev_num * 10 + num % 10;
num = num / 10;
}
return rev_num;
}
int result = 0;
int palindrome = 0;
int j = 1;
for (int i = 999; i > 0; i--)
{
for (int y = 999; y > 0; y--)
{
result = i * y;
if (result == Reverse(result))
{
if (result > palindrome)
{
palindrome = result;
}
}
}
}
Console.Write(palindrome);
Console.Read();
推荐阅读
- sql - 后端是否应该在 SQL 查询之前执行一致性检查?
- javascript - 未找到电子菜单栏模块
- html - 即使完成链接href,将HTML链接到CSS也有问题,文件位于同一文件夹中
- spring - 具有 IBM MQ 连接刷新或失效的 Spring JMS
- android - 在 Android 中未收到带有 android plaid sdk 的成功回调
- python - 如何在同一类的第二个函数中引用变量?
- postman - 无法生成集合 提供的架构无效
- webpack - 为什么 react-script build 在 cmd 中失败,但在 npm 脚本中成功(npm run build)?
- java - 在 Tomcat 服务器上运行 Java Servlet 单元测试
- javascript - 猫鼬排序月份