将计算值存储到数组中
我正在尝试一些在线问题。我编程了如何解决2个两位数字的最大回文产品。例如91 * 99 = 9009。我设法通过使用递归函数来做到这一点,但我不知道如何使用这样的数组来做到这一点?将计算值存储到数组中
product[0]=9;
product[1]=0;
product[2]=0;
product[3]=9;
或者计算出的产品是否为969;
product[0]=9;
product[1]=6;
product[2]=9;
然后我会输出它从最后一个索引开始到第一个索引,然后测试它是否等于原始数字。
编辑: 我的问题是,我如何将计算的产品存储到数组?
没有理由使用数组来解决Project Euler问题。但是如果你注意到它,那么有一个简单的算法来将数组数组转换为数字。只是这样做:
int number = 0;
int number_2 = 0;
//going forwards:
for (int i = 0; i < array.length; i++)
{
number = number * 10 + array[i];
}
//going backwards:
for (int i = array.length - 1; i >= 0; i--)
{
number_2 = number_2 * 10 + array[i];
}
if (number == number_2)
{
//you have a palindrome
}
这不是最有效的方法,我知道(@ Nandkumar的速度更快),但它真的很简单,那就是我的目标了。
我不会写你的代码,因为它看起来像一个任务,但我会给你一个提示。
首先将int转换为字符串。
字符串中的字符与数组非常相似,因此将字符串转换为数组很容易。
提供你的产品String.valueOf(int)
,它会转换为字符串,然后使用String.toCharArray()
它转换成数组一样
boolean palindrome = true;
int product = 9009; // or any calculated number
char str[] = String.valueOf(product).toCharArray();
for(int i=0,j=str.length-1; i!=j ;i++,j--) {
if(str[i] == str[j]){
continue;
} else {
palindrome = false;
break;
}
}
ohh。我懂了。我缺少.toCharArray()。我刚开始学习像2周前的Java,我仍然想知道你们如何设法找出正确的代码。谢谢! – WannaCSharp 2012-08-10 06:27:12
没关系我读错了 – dcow 2012-08-10 06:28:41
@DavidCowden:我和j本地循环,并在循环的范围内,所以你会如何得出结论产品是回文或不是? – 2012-08-10 06:30:52
你也应该编辑问题的名称。 – 2012-08-10 06:06:57
目前尚不清楚为什么你认为使用数组会有所帮助。您可以在不使用数组的情况下制作迭代解决方案。提示:'String.charAt'。 – 2012-08-10 06:09:30
如果它是一个回文,那么只需在'List li = new ArrayList (); while(product> 0){li.add(product%10); product/= 10;}'并测试'li'列表是否是回文数组。 –
2012-08-10 06:09:31