TopCoder is suitable for programming beginners

Forum: PC programming project euler





hello, do you know projecteuler.net? i think the site is pretty good (as far as i can tell, i'm not far at solving problem 4) and with this i have already encountered a problem, namely checking whether a number is a palindrome or not . i wanted to "just" write a little function, but it somehow doesn't work yet. So if you also want to help program something and want to present your solutions, you can do that here;) and if you can give me a tip why my function doesn't do what it should, you can do that too. have fun solving the problems! lg lukas
1intis_palindrome (intx) {
2// Checks max 10 digit numbers whether they are palindromic.
3// returns 99 if x is not allowed
4// returns 1 if x is a palindrome
5// returns 0 if x is not a palindrome
6charn = 0;
7do {// determine the number of digits
8if (x <10) return1;
9if (x> 999999999) n = 10; break;
10if (x> 99999999) n = 9; break;
11if (x> 9999999) n = 8; break;
12if (x> 999999) n = 7; break;
13if (x> 99999) n = 6; break;
14if (x> 9999) n = 5; break;
15if (x> 999) n = 4; break;
16if (x> 99) n = 3; break;
17if (x> 9) n = 2; break;
18return99;
19} while (true);
20chara [n];
21charb [n];
22inttmp;
23for (inti = 0; i
24a [i] = 0; b [i] = 0;
25}
26for (inti = 0; i
27tmp = 0;
28for (intj = 0; j
29tmp + = a [j];
30}
31tmp = x-tmp;
32a [i] = tmp% int (pow (10, i));
33}
34for (inti = 0; i
35b [i] = a [n-i];
36}
37for (inti = 0; i
38if (a [i]! = b [i]) return0;
39}
40return1;
41}


my approach was very simple: convert number to string invert string compare strings;)
1boolisPalindromNumber (uint64_tn)
2{
3ostringstreamostr;
4ostr << n;
5stringst;
6stringt = ostr.str ();
7reverse (t.begin (), t.end ());
8returnostr.str () == t;
9}
then just two nested loops that test all combinations. Since there are no runtime requirements and there are only 900 iterations per loop, it can still be done quickly



I would have reassembled the number. (untested)
1intis_palindrome (uint64_tzahl) {
2uint64_tz, rotated = 0;
3
4for (z = number; z> 0; z / = 10)
5rotated = rotated * 10 + (z% 10);
6
7return (rotated == number);
8}
A 32-bit int can hold values ​​up to almost 2 billion. That is 10 digits, but not quite :-)



If you can't solve it, then you can't solve it. ;) I've spent many days with project euler. Helping each other is definitely not welcome there.



We had some time ago. The Project Euler problems are relatively boring and not demanding, as there are no runtime restrictions and you do not have to try to come up with something clever. I think http://www.spoj.pl/ is much better, but that should be too high for most Ings duck and away



anon wrote:> If you can't solve it, then you can't solve it. ;) >> I've spent many days with project euler. Helping> each other is definitely not welcome there. hello, I didn't ask for a code to copy-paste ... I will continue to work on my solution ... although I like the conversion to string very much;) Thanks for your comments so far! I'll have a look at the other side tonight. sounds interesting, even if it should be difficult, or even because of it. apparently you grow with the challenge :) lg lukas



lukas wrote:> and if you can give me a tip why my function doesn’t do> whatever it should, you can do that too.> a [i] = tmp% int (pow (10, i)); That shouldn't do what you think it should do. But your code is so tangled that it's hard to tell without seeing it in action. Have the arrays output to you, then you can see what comes out and you can continue thinking. I can’t let it go. if you want to divide a number into ones, tens, etc. then that's how it works
1i = 0;
2while (x> 0) {
3a [i] = x% 10;
4x = x / 10;
5++ i;
6}
you approach it in a rather complicated and confusing way.



anon wrote:> i have spent many days with project euler. Me too, unfortunately only 40 (??) puzzles solved. > That help> one another is definitely not welcomed there. Psst, just don't tell anyone (or keep saying?). As for problem 4, I took perl, beware of novice programmers (in Perl):
1use strict;
2use warnings;
3
4my $ z1;
5my $ z2;
6my $ val;
7my $ valr;
8my $ max = 1;
9
10for $ z1 (100..999)
11{
12 for $ z2 ($ z1..999)
13 {
14 $ val = $ z1 * $ z2;
15 $ valr = reverse $ val;
16 if ($ val eq $ valr)
17 {
18 $ max = $ val if ($ val> $ max);
19 }
20 }
21}
22
23print $ max;
Takes less than a second on my box.


anon wrote:> If you can't solve it, then you can't solve it. ;) >> I've spent many days with project euler. The help> among each other is definitely not welcomed there. It's bullshit. Whether someone helps you or not cannot be controlled anyway. You could also ask a friend, or a fellow student, or a work colleague, ...



so, i have now found a working, not very efficient, solution that can be executed on most computers in less than 5sec. what kind of solution do you get out? I get 90909 out, it should be right, right ??? lg lukas ps spoj.pl also looks very interesting, and the first task definitely makes you want more :)



Vlad Tepesch wrote:> My approach was very simple: >> Convert number to string> Invert string> Compare strings Unfortunately, it is wrong: # 4: Find the largest palindrome made from the product of two 3-digit numbers. In addition: Even if you find the number on a computer, the task is not solved because the proof it is missing that the number found has the required properties.



Johann L. wrote:> Vlad Tepesch wrote: >> my approach was very simple: >>>> convert number to string >> reverse string >> compare strings >> but unfortunately it is wrong: >> # 4: Find the largest palindrome made from the product of two 3-digit> numbers. >> In addition: Even if you find the number on a computer, the> task is not solved because there is no evidence that the number> has the required properties. it was only a question of whether a number is a palindrome or not, and that this function then has to be built into the actual program to solve the problem is clear. lg lukas



and because i'm at it, what do you get out of problem 8? 40824 is my solution. could be true, right? lg lukas


Johann L. wrote:> Unfortunately it is wrong: >> # 4: Find the largest palindrome made from the product of two 3-digit> numbers. I see no contradiction. I iterate quadratically over the numbers 100..999, test for palindrome using the above-mentioned approach and note the largest previous palindrome number.



lukas wrote:> so, i now have a working, not very efficient, but> found solution that can be executed on most computers in less than 5sec. >> what kind of solution do you get out? >> i get 90909 out, but should correct, or ??? not correct. lukas wrote:> and because i'm at it, what do you get out of problem 8? >> 40824 is my solution. could be true, right? fits.



lukas wrote:> I get 90909 out, should be right, right ??? Is wrong by a factor of about 10.