(langsam wirds mĂĽhsam)
ja fĂĽr mich auch
wie schon mal gesagt ICH habe:
#include <stdio.h>
void main()
{
int summe=0;
int basis,ziffer,zahl;
printf("Geben Sie bitte Ihre Basis ein:\n");
scanf("%d",&basis);
printf("Geben Sie bitte Ihre Zahl ein:\n");
scanf("%d",&zahl);
while((zahl>0)
{
ziffer=zahl%basis;
printf("%d",ziffer);
zahl=zahl/basis;
}
}
//umwandeln einer zahl von dezimal in beliebig
und eben siehe oben:
#include "stdafx.h"
double umwandler(char *zahl, unsigned int basis);
static unsigned int basedig(unsigned char dig, unsigned int basis) ;
//basedig=funktion, die eine ziffer (char 0-9, a-z) als int (dezimal) zurĂĽckgibt. wobei mir gerade auffallt, daĂź der "base" parameter hier nicht verwendet wird.
void main()
{
float x;
x = umwandler("-10.10", 16);
printf("%f \n", x);
}
static unsigned int basedig(unsigned char dig, unsigned int basis)
{
if (dig >= '0' && dig <= '9')
return dig - '0';
else if (dig >= 'A' && dig <= 'Z')
return dig - 'A' + 10;
return -1;
}
double umwandler(char *zahl, unsigned int basis)
{
/* zahl: string in form von zb "32fac2" */
/* base: 2 .. 36 */
unsigned int ret, dig; //dig=wert (0-35) der aktuell bearbeiteten ziffer
double nc, fact, exp; //nc=Nachkommateil der Zahl,fact=Vorzeichen,exp=exponent wird zum durchdividieren der einzelnen stellen des nachkommateils gebraucht
unsigned char *cp; //char pointer, damit wird der string von anfang bis ende zeichen fĂĽr zeichen durchgehatscht
if (!zahl || basis < 2 || basis > 36)
return -1;
ret = 0;
nc = 0;
fact = 1; // Variable fĂĽr das Vorzeichen
cp = (unsigned char *) zahl;
/* fĂĽhrende spaces ĂĽberspringen */
while (*cp == ' ')
cp++;
if (*cp == '-')
{
fact = -1;
cp++;
}
while (*cp)
{
dig = basedig(*cp, basis);
if (dig == -1)
break; /* konvertierung stoppt beim ersten ungĂĽltigen zeichen */
if (dig >= basis)
break; /* konvertierung stoppt beim ersten ungĂĽltigen zeichen */
ret=ret*basis;
ret=ret+dig;
cp++;
}
if (*cp == '.')
{
cp++;
exp = basis;
while (*cp)
{
dig = basedig(*cp, basis);
if (dig == -1)
break;
if (dig >= basis)
break;
nc += dig / exp;
exp *= basis;
cp++;
}
}
return fact * (nc + ret); //gibt das endergebnis zurĂĽck, bestehend aus vorzeichen (fact), ganzzahliger anteil (ret) und nachkommateil (nc)
}