Avatar billede sunep Nybegynder
12. april 2003 - 13:34 Der er 24 kommentarer og
2 løsninger

Sammensætte 2 variabler

hvis jeg har 2 int variabler

int a = 5;
int b = 9;

og gerne vil sammensætte disse to variabler, så resultatet vil være at min sidste int variabel c vil have værdien 59
hvad skal jeg så gøre
Avatar billede tosssen Nybegynder
12. april 2003 - 13:36 #1
int c = 10*a + b;
Avatar billede casualty Nybegynder
12. april 2003 - 13:37 #2
Kan man ikke lave dem om til en string, lægge dem sammen og konvertere dem til en int igen?

Mvh Casualty
Avatar billede casualty Nybegynder
12. april 2003 - 13:37 #3
Klunser løsning jeg kom med :)
Avatar billede tosssen Nybegynder
12. april 2003 - 13:37 #4
Det skulle løse problemet
Avatar billede arne_v Ekspert
12. april 2003 - 13:38 #5
Hvis a og b altid er etcifrede så er tossen's forslag korrekt.
Avatar billede tosssen Nybegynder
12. april 2003 - 13:39 #6
Man behøver faktisk kun at forlange b etcifret
Avatar billede sunep Nybegynder
12. april 2003 - 13:40 #7
tosssen: det er kanont det du kom med der men det kan kun bruges til 1 cifrede variabler. det er nu også tilfældet at jeg kun bruger 1 cifrede i det her program.. men stadig vil jeg gerne vide om det kan lade sig gøre med størrer tal
Avatar billede tosssen Nybegynder
12. april 2003 - 13:42 #8
Du kan ved at tage logaritmen til b finde ud af hvor mange cifre b består af og derefter bruge a*10^n + b
,hvor n er antallet af cifre i b
Avatar billede arne_v Ekspert
12. april 2003 - 13:44 #9
int pow10[] = {10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };

c = a * pow10[log10(b)] + b;
Avatar billede sunep Nybegynder
12. april 2003 - 13:50 #10
takker i får point lige om lidt.. lige for at jeg ikke gider oprettet et spørsmål mere.. er der ikke en af jer så der kan hurtigt kan sige hvilken fil jeg skal include og hvilken funktion jeg skal bruge for at feks at få 4 tegn fra venstre i en int variabel?
Avatar billede tosssen Nybegynder
12. april 2003 - 13:50 #11
arne_v >> Det eneste du mangler er at sørge for at log10(b) bliver rundet ned til nærmeste heltal og der bliver lagt 1 til bagefter
Avatar billede arne_v Ekspert
12. april 2003 - 13:52 #12
tossen>

Nej - jeg skal ikke ligge 1 til - arrays i C starter i 0 !
Avatar billede tosssen Nybegynder
12. april 2003 - 13:54 #13
Selvfølgelig - jeg kom til at tænke ren matematik ;-) Men der skal vel stadig rundes ned til nærmeste heltal?
Avatar billede arne_v Ekspert
12. april 2003 - 13:55 #14
Muligt. Jeg er ikke klar over om C/C++ slev gør det.

Men:

c = a * pow10[(int)log10(b)] + b;

bør ihvertfald virke.
Avatar billede sunep Nybegynder
12. april 2003 - 13:56 #15
arne_v du må lige svare så jeg kan få smidt nogen point ud
Avatar billede tosssen Nybegynder
12. april 2003 - 13:57 #16
Jeg synes i hvert fald det ser pænest ud med en casting ;-)
Avatar billede arne_v Ekspert
12. april 2003 - 13:58 #17
int scale[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };

int v = 123456;

v = v / scale[(int)log10(v) - 3];
Avatar billede arne_v Ekspert
12. april 2003 - 13:58 #18
OK.

(selvom jeg faktisk synes at tossen har svaret før mig på det hele)
Avatar billede sunep Nybegynder
12. april 2003 - 14:00 #19
ok så svar lige i det ? jeg lige har oprettet
Avatar billede tosssen Nybegynder
12. april 2003 - 14:00 #20
Det vil jeg også mene jeg har, men vil godt gå med til at dele, idet jeg ikke gav nogen konkret kode
Avatar billede arne_v Ekspert
12. april 2003 - 14:01 #21
Hvis man skal gøre dette her milliarder af gange er log10 lidt
dyr.

For 15 minutter siden lavede jeg følgende ovre i Java kategorien
(konverteret til C her):

    int digits(int v) {
        if(v < 10000) {
            if(v < 100) {
                if(v < 10) {
                    return 1;
                } else {
                    return 2;
                }
            } else {
                if(v < 1000) {
                    return 3;
                } else {
                    return 4;
                }
            }
        } else {
            if(v < 1000000) {
                if(v < 100000) {
                    return 5;
                } else {
                    return 6;
                }
            } else {
                if(v < 10000000) {
                    return 7;
                } else {
                    return 8;
                }
            }
        }
    }
Avatar billede arne_v Ekspert
12. april 2003 - 14:01 #22
Og så er det:

c = a * pow10[digits(b) - 1] + b;

og:

v = v / scale[digits(v) - 4];
Avatar billede arne_v Ekspert
12. april 2003 - 14:02 #23
Jeg har svaret på "omvendt % 10000".
Avatar billede sunep Nybegynder
12. april 2003 - 14:03 #24
hvad gør digits
Avatar billede arne_v Ekspert
12. april 2003 - 14:07 #25
digits finder antal cifre i en int.

Det samme gør log10.

Hvis du kun skal kalde den nogle tusind/millioner gange så brug bare
log10.

Hvis du skal kalde den rigtigt mange gange så brug digits eller noget
tilsvarende.
Avatar billede tosssen Nybegynder
12. april 2003 - 14:32 #26
Tak for points ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester