![]() |
|
|
|
#1
|
||||
|
||||
|
carac2 = carac2 + resultat[cpt3] ;
???? the original value of resultat[cpt3] is...? You can try with simple values to test how it works. |
|
#2
|
|||
|
|||
|
Don't you think the while-loop may become infinite ?
Nevertheless I sujest you, if you want reverse only few values, to write a bruteforce loop comparing the result with the value you want to reverse. |
|
#3
|
|||
|
|||
|
while(carac2!=0) { carac2 = carac2 + resultat[cpt3] ; resultat[cpt3] = carac2 % 100 ; carac2 = carac2 div 100 ; cpt3++ ; } Are you sure you did it well? carac2 = carac2 div 100 - I'm assuming I see the division, rigth? Then go study math - the division will never give you 0 (in the integers ring) - and you check for 0 in while loop - endless cycle. |
|
#4
|
||||
|
||||
|
Probably Djneo posted a strict PDL description than a real pseudo code logic (sorry, but the posted idea itsn't logic for me).
Personally I think the problem is not only in the last condition (while loop) but whole presented code. What about cpt3 and cpt4 values? They are actually doing nothing. That's all from me in this thread since Startrek related problems are far too much for my poor brain .
|
|
#5
|
|||
|
|||
|
cpt3 and cpt4 are pointers.
cpt4 has no problems, but cpt3 well because of the while loop. What's the upper limit of cpt3 ? Last edited by Michel; 11-25-2004 at 20:16. |
|
#6
|
||||
|
||||
|
cpt3 and cpt3 don't play any role because cpt2 won't reach 0 value. If you ask what is the limit of cpt3 then it doesn't have any. It should be set to 0 on each "while" condition execution but the code is a little bit strange and it goes into endless loop.
|
|
#7
|
|||
|
|||
|
Quote:
Let's assume carac2 enters the loop with 1000. After line 1, let's say 1050. Line 2 will produce 50, line 3 will produce 10. In the second iteration, line 1 might give 67 (added 57 this time), line 2 = 57, line 3 = ..... 0. Each iteration adds a (small) amount to carac2, then shifts it right by 2 decimal places, eventually resulting in 0. Does it not?
|
|
#8
|
|||
|
|||
|
In the second iteration, line 1 might give 67 (added 57 this time), line 2 = 57, line 3 = ..... 0.
DAMN... DAMN... DAMN ONE MORE TIME. It is me who should go and study comp.sci. This is the integer arithmetic... Fuck. OK, carac2 = carac2 + resultat[cpt3] ; (1) - you say, for example, carac2 will be 67. OK. Fine. Then: resultat[cpt3] = carac2 % 100 ; (2) the operation "%" in C/C++ is the same as mod in number theory. So, 67 mod 100 = 67 - not 57 as you are trying to say if I understood you properly, of course... Then: carac2 = carac2 div 100 -> carac2 = 67/100 - this is normally not 0, of course, BUT this is computer arithmetic and the result is rounded up, so it will be floor(67/100) which is 0 indeed. So you are partially right and I'm wrong. My bad. |
|
#9
|
|||
|
|||
|
Of course line (2) will result in 67, my mistake
67 % 100 -> 67 67 / 100 -> 0 (integer) Now one other strange thing in the algo - where do the "resultat[cpt3]" values come from? |
![]() |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Help identify crypto | The Old Pirate | General Discussion | 5 | 12-27-2014 04:15 |