Du bist nicht angemeldet.

Werbeanzeige

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

11

20.10.2008, 21:23

Hm eigentlich hab' ich Visual Studio drauf, na wer weiß.
Jetzt geht's jedenfalls, danke! :)

12

20.10.2008, 22:49

Zitat von »"David Scherfgen"«


- Verwenden der Standardbibliothek ist verboten.

Also auch std::string und strcpy?

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 184

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

20.10.2008, 22:56

Zitat von »"Florianx"«

Zitat von »"David Scherfgen"«


- Verwenden der Standardbibliothek ist verboten.

Also auch std::string und strcpy?

Ja, da sie zur Standardbibliothek gehören.

Helmut

5x Contest-Sieger

Beiträge: 691

Wohnort: Bielefeld

  • Private Nachricht senden

14

21.10.2008, 01:03

Hi,
schöne Aufgabe, nur etwas kompliziert für KdC.

19 ist übrigens XIX und nicht IXX

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 184

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

21.10.2008, 08:05

Stimmt :)
So kompliziert ist es eigentlich nicht.
Ich will jetzt aber nicht verraten, wie viele Token ich habe.
Es ist zwar schon etwas mehr als bei den anderen Contests, aber hält sich durchaus im überschaubaren Rahmen.

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

16

21.10.2008, 08:41

Zitat

- Verwenden der Standardbibliothek ist verboten.


Zu std::string in der Referenz:
Zählt der String nun nicht zur Standardbibliothek oder
darf die Referenzfunktion den einfach trotzdem benutzen? :P

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 184

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

17

21.10.2008, 09:49

Zitat von »"Asmodiel"«

Zu std::string in der Referenz:
Zählt der String nun nicht zur Standardbibliothek oder
darf die Referenzfunktion den einfach trotzdem benutzen? :P

Schau doch mal in den Quellcode:

C-/C++-Quelltext

1
2
    // Referenzimplementierung

    // (Sie darf die Standardbibliothek benutzen, haha!)

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

18

21.10.2008, 09:55

Achso, noch nicht gelesen. :)
Unfair ;P

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 184

Wohnort: Bonn

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

19

21.10.2008, 09:57

Die Referenzimplementierung soll nur zeigen, wie man es von der Idee her lösen kann, damit niemand sagen muss "Keine Ahnung, ist mir zu schwer!"
Ohne Standardbibliothek wäre sie nur sehr schwer lesbar.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

20

21.10.2008, 15:46

Für alle, die - wie von David vorgeschlagen - ihre Lösung gegen alle 3999 denkbaren Eingaben testen möchten, eine Funktion zur Konvertierung einer Zahl in ihre römische Darstellung in Form eines string:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void translate_number_to_roman(int number, std::string &text)
{
    text.clear();
    
    char digit[] = { 'I', 'V', 'X', 'L', 'C', 'D',  'M' };
    int  value[] = {   1,   5,  10,  50, 100, 500, 1000 };
    
    // Für alle Ziffern, absteigend nach ihrer Wertigkeit

    for (int i = 6; i >= 0; --i)
    {
        // Abzählen, wie oft der Wert der Ziffer in der Zahl enthalten ist

        int count = 0;
        while (number >= value[i])
        {
            number -= value[i];
            count++;
        }
        
        // Subtraktionsregel, nur auf I,X,C anwendbar

        if (!(i%2)  && (i<5) && (count == 4))
            if (!text.empty() && (*text.rbegin() == digit[i+1]))
            {
                *text.rbegin() = digit[i];
                text.push_back(digit[i+2]);
            } else {
                text.push_back(digit[i]);
                text.push_back(digit[i+1]);
            }
        // ohne Subtraktionsregel

        else
            for (;count;--count)
                text.push_back(digit[i]);
    }
}

Edit: Helmuts Korrektur eingebaut

Werbeanzeige