Manipution des grands entiers

selabielvis - 1 mai 2013 à 14:19
 selabielvis - 1 mai 2013 à 19:59
Comment Ecrire de code qui tournent vite même avec les grands entiers
svp aider moi j'ai ecrit le code suivant mais avec le grandes données çà prends trop de temps

i=1
c=""
while i<=n:
co= contenu[i].split(" ")
A=co[0]
B=co[1]
print ("A = ",A," B= ",B)
c="{0}Case #{1}: {2}\n".format(c,i,solution(A,B))

i+=1
save("output.in",c)

si A vaut par exemple 1 et B vaut 1000000000000000 alors an va passer une bon bout de temps avant de voir les resultats

Big Developper new

2 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
1 mai 2013 à 19:24
Salut,

Tu as codé ca en java ?

C'est normal que ce soit long si B vaut 1000000000000000, tu peux optimiser ca, mais pour commencer à optimiser, il faut coder, et on verra après pour le reste.

Donnes nous le code java que tu as produit et je te donnerai quelques pistes.
0
public static void save(String chemin, String ch2) {
File f=new File(chemin);

PrintWriter bw;
try {
bw = new PrintWriter(f);
bw.println(ch2);
bw.close();
} catch (FileNotFoundException event) {

System.out.println("Fichier introuvable "+event.getMessage());
}

}
public static void main(String[] args) {

try
{ String savef="";
File f = new File ("input.txt");
FileReader fr = new FileReader (f);
BufferedReader br = new BufferedReader (fr);

try
{
String line = br.readLine();
if(line!=null)
{
int nb=Integer.parseInt(line);

int k;
for( k = 0;k<nb;k++)
{


int result=0;

line = br.readLine();

StringTokenizer tok = new StringTokenizer(line," ");

BigInteger r = new BigInteger(tok.nextToken());
BigInteger t = new BigInteger(tok.nextToken());
BigInteger C = r.multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(1));
if(C.compareTo(t)<=0)
{ result++;
r=r.add(BigInteger.valueOf(1));
t=t.subtract(C);
C = r.multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(3));

while(C.compareTo(t)<=0)
{

result++;
r=r.add(BigInteger.valueOf(2));
t=t.subtract(C);

C = r.multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(3));

}
}
savef+=("Case #"+(k+1)+": "+result+"\n");
System.out.print(("Case #"+(k+1)+": "+result+"\n"));
}
save("output.in",savef);
}
br.close();
fr.close();
}
catch (IOException exception)
{
System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
}
}
catch (FileNotFoundException exception)
{
System.out.println ("Le fichier n'a pas été trouvé");
}




}


et voila un exemple de input

16
308436464205151562 1850618785230909388
60603649654442191 727243795853306359
231839427620128932 1391036565720773608
85301933116989686 1364830929871835097
64988967223557343 1559735213365376509
202790353757729950 811161415030919806
105551677651173181 844413421209385476
18939616890015759 1060618545840884044
373665302816212423 1494661211264849698
12949473624521292 1787027360183947749
760961177192651897 1521922354385303795
589071333309674487 1178142666619348975
372898692238784834 745797384477569669
232787466855496855 465574933710993711
484495901652806307 968991803305612615
1 2000000000000000000
1000 2000000000000000000



Big Developper new
0
Rejoignez-nous