Avatar billede gumbert Nybegynder
29. august 2003 - 22:04 Der er 6 kommentarer og
1 løsning

få et loop til at tælle meget højt

Hej igen

  Jeg sad og legede lidt med C++ og stødte så ind i et problem. Jeg har brug for på en eller anden måde at få et loop til at tælle fra 0 til 70^10 (meget stort tal) men jeg kender ikke noget til variabler der kan indeholde så stort et tal (må ikke være som potens)

  Nogen der har en god ide?
Avatar billede htm Nybegynder
29. august 2003 - 22:11 #1
For det først sætter du variablen til at være en long int så kan du så lave løkker i løkker

for (i=0;i<1000000000;i++)
  for (j=0;i<700;i++)
   
Er ikke sikker, men måske du kan bruge en float som variable type og så lade den gøre fra 0-700000000000, men ellers er metoden løkke i løkke.
Avatar billede htm Nybegynder
29. august 2003 - 22:20 #2
#include <stdio.h>

void main(void)
{
    float i;
    for(i=0;i<700000000000;i++);
    printf("%12.0f",i);
}
Avatar billede arne_v Ekspert
29. august 2003 - 22:32 #3
Jeg tror ikke at det vil være smart at bruge floating point til
en løkke. Man kunne meget nemt risikere en uendelig løkke (for store
floating point kunne x+1 godt være x).

int og long int er det samme på de fleste moderne compilere.

En mulighed er den dobbelt løkke.

Men den mest generelle løsning må være en 64 bit integer.

De fleste moderne compilere understøtter en sådan. Typisk
hedder den long long int.

Eksempel:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
  for(long long int i = 0; i < (long long int)pow(70.0,10.0); i++) {
      cout << (double)i << endl;
  }
  return 0;
}
Avatar billede arne_v Ekspert
29. august 2003 - 22:35 #4
Hvis din compiler ikke kender long long int, så hedder den sikkert __int64 !
Avatar billede olennert Nybegynder
30. august 2003 - 09:52 #5
Og så er der inttypes.h fra C99:

#include <iostream>
#include <cmath>
#include <inttypes.h>
int main() {
  for (uint64_t i = 0; i < (uint64_t)std::pow(70.0,10.0); ++i) {
    std::cout << i << std::endl;
  }
  return 0;
}
Avatar billede gumbert Nybegynder
30. august 2003 - 15:59 #6
>>olennert

  Din løsning virker lige efter hensigten..Gider du ikke lægge et svar med en kort forklaring på hvad unit64_t betyder?
Avatar billede olennert Nybegynder
30. august 2003 - 17:07 #7
inttypes.h indeholder de følgende typer:
int8_t er en 8-bit heltalstype med fortegn
int16_t er en 16-bit heltalstype med fortegn
int32_t er en 32-bit heltalstype med fortegn
int64_t er en 64-bit heltalstype med fortegn
Og så findes de tilsvarende heltalstyper uden fortegn uint8_t, uint16_t, uint32_t og uint64_t, samt
intptr_t er en heltalstype med fortegn, stor nok til at indeholde en pointer.
uintptr_t er en heltalstype uden fortegn, stor nok til at indeholde en pointer.

Så uint64_t er altså en heltalstype for 64-bit heltal uden fortegn. Du kan altså smide tal mellem 0 og 2^64 - 1 (18446744073709551615) ind i en uint64_t. Heldigvis er 70^10 = 2824752490000000000, så der er altså plads til det tal i en uint64_t (og i en int64_t for den sags skyld).
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