Calcul avec des nombre jusqu'a 10^10000 maj

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

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.