Problema file input esercizo.

di il
2 risposte

Problema file input esercizo.

Salve a tutti recentemente mi sono avviato alla risoluzione di questo esercizio ve lo descrivo:
Dato una sequenza di N+1 numeri individuare quella più grande (nb i numeri possono arrivare fino a 40 cifre)
Il primo numero rappresenta quanti numeri ci sono nella sequenza seguono poi gli N numeri esempio (con 3 task, l'input originale ne ha 100):

input.txt:
4 3276525753254764275125712 78328263214764866843884 3868328634286863486386784 347634764376754375
6 2345 1823 2344 1643 2352 123
3 25378299384 21452671827 25378299391

output.txt
3868328634286863486386784
2352
25378299391

Ora visto che i numeri come citato nell'esercizio superano le 40 cifre ho pensato di usare le stringhe, cosi una volta chiarito come estrapolare dalle stringhe i numeri scrivo il codice, fino a qui tutto, bene provo l'input d'esempio sopra citato e tutto funziona, ma quando provo con l'input originale e lo carico sul sito per prendere il voto questo mi da 0, così controllo il file di output che è uscito e noto una cosa strana ossia che alcuni numeri iniziano con 0 (cosa abbastanza insolita) ad esempio 05432562 o 0964264 e così via e visto che c'èro ho controllato anche il file di input e noto che anche questo ha dei numeri che iniziano con lo 0, il che mi confonde, come devo interpretarli questi numeri? è sbagliato il mio codice o il file di input generato dal computer?.
qui c'è il mio codice:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

ifstream read ("input.txt");
ofstream write ("output.txt");

int main ()
{
	string x;
	string y;
	int p1=0;
	int p2=0;
	int k=0;
	int j=0;
	int first=0;
	string world;

	for (int i = 0; i < 100; i++)
	{
		read >> first;
		read >> x;
		world=x;
        for (int r = 0; r < first-1; r++)
        {
        	read >> y;
        	p2=y.length();
        	p1=world.length();
        	if (p1>p2)
        	{
        		world=x;
        		continue;
        	}else if (p1<p2)
        	{
        		world=y;
        		continue;
        	}else if(p1==p2)
        	{
        		for (int t = 0; t < p1; t++)
        		{
        			k=(int)world[t]-'0';
        			j=(int)y[t]-'0';
        			if (k>j)
        			{
        				world=x;
        				break;
        			}else if (k<j)
        			{
        				world=y;
        				break;
        			}else if (k==j)
        			{
        				continue;
        			}

        		}
        	}

        }
        write << world;
        write << '\n';

	}
	return 0;
}

2 Risposte

  • Re: Problema file input esercizo.

    I numeri che iniziano per zero sono del tutto accettabili e credo siano stati inseriti proprio per farvi riflettere un po' di più.

    Se usi le stringhe, il tuo programma, prima di fare tutti i suoi confronti, deve escludere gli zeri iniziali dalle stringhe lette.
    Ovvero un valore come

    01234

    deve diventare nella tua stringa

    1234

    ovvero un valore

    000545646546

    diventa

    545646546

    solo dopo potrai adottare il tuo codice.
  • Re: Problema file input esercizo.

    Ho, capito grazie
    Di solito loto scrivono nel "notabene" una cosa simili qui sia io che alcuni mie compagni abbiamo dovuto aprire letteralmete il file di input, perché non viene specificata la cosa.
    Faccio una modifica al codice e procedo.
    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
2 risposte