Ik geloof dat praktisch iedereen die tussenstap maakt met een string, maar dat hoeft absoluut niet. Een string omdraaien kun je doen door steeds een karakter van het einde van de invoer te nemen en dat aan de achterkant van de uitvoer toe te voegen:
| Stap | Invoer | Uitvoer |
| 1 | abcde | |
| 2 | abcd | e |
| 3 | abc | ed |
| 4 | ab | edc |
| 5 | a | edcb |
| 6 | | edcba |
Een getal omdraaien kan op dezelfde manier, mits je er een cijfer aan het eind kunt afhalen en toevoegen. Een getal erafhalen kan met
a/10 en
a%10 (waarbij % staat voor modulo, de rest na deling). Als bijvoorbeeld
a gelijk is aan 12345, dan is
a/10 gelijk aan 1234 (integer deling rond altijd omlaag af) en
a%10 gelijk aan 5.
Evenzo kun je een cijfer aan een getal toevoegen door het getal te vermenigvuldigen door 10 en er het cijfer bij op te tellen. Als ik 4 wil toevoegen aan 123, doe ik dus (123*10)+4 == 1234.
Nu kun je hetzelfde algoritme mplementeren om een getal om te draaien:
C:
1
2
3
4
5
6
7
| unsigned int a = 12345, b = 0;
while(a != 0) {
int x = a%10; /* Laatste cijfer van a */
b = 10*b + x; /* Voeg x achteraan toe aan b */
a = a / 10; /* Verwijder laatste cijfer van a */
}
/* b is nu 54321! */ |
(En ja, de code is wat langer dan strict noodzakelijk.)
De operators / en % zijn in Pascal respectievelijk div (van division) en mod (van modulo), als ik het
[
Voor 4% gewijzigd door
Soultaker op 11-11-2005 16:56
]