Calcul avec des nombre jusqu'a 10^10000 maj

Soyez le premier à donner votre avis sur cette source.

Vue 7 733 fois - Téléchargée 250 fois

Description

REGARDER LA CAPTURE D'ECRAN, CE SERAS PLUS EXPLICIT!
permet des calculs avec des nombre jusqu'a 10^10000 (!) avec une précision à l'unité!
(on peut aller jusqu'a 10^n avec n de type int)
ex :
1234568579*1234568581=1524159578723216399
aucun programme n'a une tel présision, meme pas en 64 bit!
type : _uint (unsigned int)
addition,soustraction,multiplication,division,modulo,puissance,factoriel
a+b,a-b,a*b,a/b,a%b,!b (et non b!,pour les matheux)

Source / Exemple :


#include "nb.hpp"
using namespace tom;

char*chrtime(DWORD time,char*string,int type);

int main(int argc, char* argv[])
{
DWORD tps=GetTickCount();
char*a=new char[1000];
_uint nb1="542546524";
_uint nb2=54;
_uint nb3=nb1/nb2;
printf(" %s\n",nb1.GetString(a));
printf("/%s\n",nb2.GetString(a));
printf("=%s\n",nb3.GetString(a));
printf("+/- =10^%d\n",nb3.GetLenString());
tps=GetTickCount()-tps;
chrtime(tps,a,0);
printf("Realise en %s\n",a);
delete[]a;
}

char*chrtime(DWORD time,char*string,int type)
{
	DWORD ms=0;
	DWORD s=0;
	DWORD m=0;
	DWORD h=0;
	DWORD j=0;
	DWORD mois=0;
	DWORD sem=0;
	DWORD ans=0;
	switch(type)
	{
	case 0:
		ms=time;
		s=ms/1000;ms-=s*1000;
		m=s/60;s-=m*60;
		h=m/60;m-=h*60;
		j=h/24;h-=j*24;
		mois=j/30;j-=mois*30;
		sem=j/7;j-=sem*7;
		ans=mois/24;mois-=ans/7;
		break;
	case 1:
		s=time;
		m=s/60;s-=m*60;
		h=m/60;m-=h*60;
		j=h/24;h-=j*24;
		mois=j/30;j-=mois*30;
		sem=j/7;j-=sem*7;
		ans=mois/24;mois-=ans/7;
		break;
	case 2:
		m=time;
		h=m/60;m-=h*60;
		j=h/24;h-=j*24;
		mois=j/30;j-=mois*30;
		sem=j/7;j-=sem*7;
		ans=mois/24;mois-=ans/7;
		break;
	case 3:
		h=time;
		j=h/24;h-=j*24;
		mois=j/30;j-=mois*30;
		sem=j/7;j-=sem*7;
		ans=mois/24;mois-=ans/7;
		break;
	case 4:
		j=time;
		mois=j/30;j-=mois*30;
		sem=j/7;j-=sem*7;
		ans=mois/24;mois-=ans/7;
		break;
	case 5:
		j=time*7;
		mois=j/30;j-=mois*30;
		sem=j/7;j-=sem*7;
		ans=mois/24;mois-=ans/7;
		break;
	case 6:
		mois=time;
		ans=mois/24;mois-=ans/7;
		break;
	}
	char*tmp=new char[100];
	char*nb=new char[25];

  • tmp=0;
if(ans) { ultoa(ans,nb,10); strcat(tmp,nb); strcat(tmp,"ans"); } if(mois) { if(strlen(tmp))strcat(tmp," "); ultoa(mois,nb,10); strcat(tmp,nb); strcat(tmp,"mois"); } if(sem) { if(strlen(tmp))strcat(tmp," "); ultoa(sem,nb,10); strcat(tmp,nb); strcat(tmp,"semaines"); } if(j) { if(strlen(tmp))strcat(tmp," "); ultoa(j,nb,10); strcat(tmp,nb); strcat(tmp,"jours"); } if(h) { if(strlen(tmp))strcat(tmp," "); ultoa(h,nb,10); strcat(tmp,nb); strcat(tmp,"h"); } if(m) { if(strlen(tmp))strcat(tmp," "); ultoa(m,nb,10); strcat(tmp,nb); strcat(tmp,"min"); } if(s) { if(strlen(tmp))strcat(tmp," "); ultoa(s,nb,10); strcat(tmp,nb); strcat(tmp,"s"); } if(ms) { if(strlen(tmp))strcat(tmp," "); ultoa(ms,nb,10); strcat(tmp,nb); strcat(tmp,"ms"); } if(strlen(tmp)==0)strcat(tmp,"0ms"); strcpy(string,tmp); return string; }

Conclusion :


nb: pour ceux qui veulent comprendre le code :
le nombre 1234 et rangé sous forme d'une chaine de caractère en débutant pas les décimal,pous les dixaines,centaines... :
4321000000000000...

le "#define maxlen 1000" définit la taille max des nombre
#define maxlen n permet d'utiliser des nombre jusqu'a 10^n

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
15 août 2014

Merci beaucoup KX, c'est vrai que 100*100^100 = 10^2*10^100 = 10^(100+2) = 10^(102).
Messages postés
3
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
15 août 2014

Bonjour, je débute en programmation langage C.
J'aimerai avoir plus de précision quand vous dites " Calcul avec des nombre jusqu'a 10^10000 maj ". Si j'ai bien compris, votre programmation permet de calculer des nombres dont le résultat contiendrait un nombre à 10 000 chiffres c'est-à-dire au moins 10 fois un gogol = 10 * 10^100 ?
Messages postés
3
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
15 août 2014
>
Messages postés
3
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
15 août 2014

Un nombre à 10 000 chiffres c'est-à-dire au moins 100 fois un gogol = 100 * 10^100 ? (Et non " un nombre à 10 000 chiffres c'est-à-dire au moins 10 fois un gogol = 10 * 10^100 ? " : ce qui est faux ).
Ainsi, 10^10000 s'écrit avec le chiffre 1, suivi de 10000 zéros, donc un nombre à 10 000 chiffres.
Messages postés
16036
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 septembre 2020
96 >
Messages postés
3
Date d'inscription
mardi 24 juin 2014
Statut
Membre
Dernière intervention
15 août 2014

Bonjour,

Un nombre à 10 000 chiffres c'est-à-dire au moins 100 fois un gogol = 100 * 10^100 ?
Non ! 100*10^100 = 10^102, par contre 10^10000 = (10^100)^100.

La valeur exacte d'un nombre aussi grand est impossible à stocker dans un ordinateur, par exemple avec 1 To on ne peut stocker qu'un seul nombre de valeur 10^12, alors 10^10000...

PS. Ce code a été posté il y a plus de 10 ans, ne t'attends pas trop à avoir une réponse de l'auteur qui n'a jamais remis les pieds sur ce forum depuis...
Messages postés
101
Date d'inscription
samedi 9 février 2002
Statut
Membre
Dernière intervention
5 mai 2009

Je vais poster une class BigInt avec tout ce qui faut dedans ...
Afficher les 60 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.