C :: Aufgabe #1 :: Lösung #1
7 Lösungen
#1
Multiplikation ohne zu multiplizieren
Anfänger - C
von Gustl
- 11.11.2012 um 17:24 Uhr
Erstellen Sie ein Konsolenprogramm welches dem Benutzer auffordert 2 Zahlen einzugeben, diese sollen dann multipliziert werden, jedoch ist nur die Grundrechenart Addition erlaubt.
Wenn einer der 2 Zahlen keine Zahl ist, soll eine Fehlermeldung ausgegeben werden und der Benutzer noch einmal aufgefordert werden eine Zahl einzugeben.
Wenn einer der 2 Zahlen keine Zahl ist, soll eine Fehlermeldung ausgegeben werden und der Benutzer noch einmal aufgefordert werden eine Zahl einzugeben.
#1
von devnull (8870 Punkte)
- 08.07.2013 um 07:29 Uhr
/****************************************
* prod1.c Produkt ohne Multiplikation
* Binäre Stellenwertaddition
*
* OS : GNU/Linux
* compile: gcc -Wall -o prod prod1.c
*
* devnull 08-07-2013
****************************************/
#include <stdlib.h>
#include <limits.h>
#include <values.h>
#include <stdio.h>
#include <errno.h>
/* values.h: #define INTBITS sizeof(int)*CHAR_BIT */
/* return an unsigned int */
unsigned int get_number( int lfn )
{
char snum[20];
char *ep;
long int lnum=0;
while (1) {
printf(" %d. positive ganze Zahl: ", lfn );
scanf( "%s", snum );
errno = 0;
lnum = strtol( snum, &ep, 10);
if ((errno==0) && (*ep=='\0')) {
if (lnum>=0 && lnum<=INT_MAX)
break;
printf( "Zahl liegt ausserhalb Limits (0..%d)!\n",INT_MAX );
}
else
printf( "Eingabe hat kein korrektes 'long int'-Format!\n" );
}
return (unsigned int)lnum;
}
/* calculate product w/o multiplication */
unsigned long int prod( unsigned int i1, unsigned int i2 )
{
unsigned long int sum=0;
unsigned long int l1=0;
int shift;
l1=(unsigned long int)i1;
for (shift=0; shift<INTBITS; shift++)
if (i2>>shift & 1) sum += l1<<shift;
return sum;
}
/* main */
int main( void )
{
unsigned int a = get_number(1);
unsigned int b = get_number(2);
printf("%u x %u = %lu\n",a,b,prod(a,b));
return 0;
}
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
