03. februar 2004 - 00:03Der er
6 kommentarer og 1 løsning
Bryde tal op i bestanddele - optimering af script
Hi E,
Jeg har et 5-cifret tal jeg gerne skulle have brudt ned i mindre bestanddele, da jeg skal bruge de enkelte dele i forskellige sammenhænge. Tag fx tallet 40823. Dette tal er (i denne sammenhæng) en kode for fire tal:
40000 40800 40820 40823
Dvs. at tallet er opbygget således: 4-08-2-3, hvor det første ciffer kan være 1-9, andet ciffer 0-99, tredje og fjerde ciffer 0-9.
Det jeg således har brug for er en metode til at hive de enkelte tal ud. Det afgørende er hastigheden hvormed det sker, hvorfor det gerne skulle holdes som simple taloperationer og ikke konverteres til tekststrenge.
Jeg har selv bikset følgende sammen. Det virker, men spm er om det kan gøres hurtigere og/eller simplere.
Derudover skal det være en funktion, der tjekker om intCode2-3 er 0 - sagt på en anden måde: hvis intCode1 er 0, så skal resten ikke findes (for de er pr. definition 0 - numrene 40028, 41107 eller 40004 kan fx ikke eksistere). Det samme for intCode2 og 3. Det har jeg gjort således, men også det vil jeg gerne høre nogle bud på forbedringer af.
intCode1 = CLng(Round(Code/10000, 0)*10000) If Code-intCode1<>0 Then intCode2 = CLng(Round((Code-intCode1)/100, 0)*100+intCode1) If Code-intCode2<>0 Then intCode3 = CLng(Round((Code-intCode2)/10, 0)*10+intCode2) If Code-intCode3<>0 Then intCode4 = Code End If End If
intCode1 = (Code\10000)*10000 intCode2 = ((Code Mod 10000)\100)*100+intCode1 intCode3 = ((Code Mod 10000)\10)*10+intCode1 intCode4 = Code
for at få koderne ud som 5-cifrede. Hm, tja... den var nu egentlig snedigt nok - den modulator sammen med operatoren \ er jo ganske nyttig. Halvdelen er pointene er så godt som hjemme ;-)
Hvad med anden del af mit spm.? Kan det optimeres?
Ja, når Time()>midnat, så falder min formuleringsevne eksponentielt med tiden ;-)
Det, jeg leder efter, er et script, der stopper udregningen af koder, når den første værdi ramme 0. Ved at bruge Code-intCode1, Code-intCode2, etc. kan jeg teste, om den næste kode vil være 0 (ud fra om der er en rest eller ej), allerede inden jeg begynder at regne på den næste kode. Jeg tænkte, at det ville være hurtigere end at regne koden ud for derefter at konstatere, at værdien er 0.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.