C for schleife multiplikation |
0664jester
Jungspund
Dabei seit: 22.03.2014
Beiträge: 18
|
|
C for schleife multiplikation |
|
hallo,
ich versuche hier eine additon zu schreiben:
Ich moechte eine multiplikation per hand durch fuehren.
123*456
dazu muss ich 6 mit 123, 5 mit 123 und 4 mit 123 mulitplitzieren und dann
die ergebnisse zwischenspeichern, die ich dann shiften muss und addieren.
int b2 = b / 100;
int b1 = (b % 100)/10;
int b0 = b % 10;
for (int i=0; i<3, i++)
wie kann ich das in eine schleife packen, sodass b0, b1, b2 mit a jeweils multiplitziert wird.
mein problem liegt daran, dass ich jetzt nicht weiss, wie wie am besten auf b0 b1 b2 zugreifen soll?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von 0664jester: 25.03.2014 20:55.
|
|
25.03.2014 20:54 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Hallo 0644jester,
entschuldige bitte die fehlende Hilfe zur Selbsthilfe. Ich hoffe ich habe dein Anliegen richtig verstanden:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv){
int a = 123;
int b = 456;
int result = 0;
while(a!=0){
result += b * (a % 10);
b*=10;
a/=10;
}
printf("%d\n", result);
return 0;
}
|
|
Solltest Du Fragen dazu haben, gib bitte Bescheid.
VG,
Karlito
|
|
25.03.2014 21:41 |
|
|
0664jester
Jungspund
Dabei seit: 22.03.2014
Beiträge: 18
|
|
hi,
danke für die Antworten,
mir wurde gestern mitgeteilt dass ich nur additionen und subtraktionen verwenden darf...
bei 3 stelligen Zahlen gibt es eine Schleife, welche 3 mal durchlaufen ist.
* Bei jedem Schleifedurchlauf wird ein Partialprodukt ermittelt und zum Produkt addiert.
* Fuer jedes Partialprodukt braucht man den wert von a, welcher Stelle fuer Stelle
* nach links verschoben wird.
* Und man muss in jedem Schleifendurchlauf das niederwertigste Bit von b betrachten und sodann b um eine
* eine Stelle nach rechts verschieben.
lg
|
|
28.03.2014 08:03 |
|
|
0664jester
Jungspund
Dabei seit: 22.03.2014
Beiträge: 18
|
|
wie spalte ich a*b mod c am besten auf?
|
|
28.03.2014 08:05 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Hallo,
also irgendwie verstehe ich jetzt gar nicht mehr, was Du genau machen willst/musst.
Erst redest Du von drei Stellen, über die Du iterieren willst. Nach Deinen ersteren Beispielen sollten das wohl Dezimalstellen sein, oder?
Dann redest Du aber von Bit und "Stelle für Stelle nach links verschieben" und so, ohne Multiplikation zu verwenden, was mir alles danach klingt, als ob es im Binär-System gemacht werden soll.
Kannst Du nicht mal die Aufgabenstellung wörtlich hier rein stellen, damit wir wissen, was genau überhaupt Sache ist...
Gruß
Marco
|
|
28.03.2014 11:04 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Hallo,
im Kontext mit den anderen Fragen geht es denke ich um Probleme aus der theoretischen Informatik. So zum Beispiel um das Abschätzen der Laufzeit von Multiiplikation von großen Zahlen (Komplexitätsklasse).
Ich bewege mich auf sehr dünnem Eis wenn ich mich jetzt weiter dazu äußere, da mit momentan die Zeit fehlt mich damit wieder auseinanderzusetzen... Nach Montag wird das dann wieder besser und ich werde versuchen mir auch die anderen Fragen anzuschauen.
@Jester: bitte dazu noch mal die Fragen so stellen, dass sie leicht lesbar, eindeutig und vollständig spezifiziert sind. Das erhöht auch allgemein die Wahrscheinlichkeit, dass geantwortet wird. In einer Frage wurden Sonderzeichen verwendet, welche nicht dargestellt werden können. Dazu bitte LaTeX verwerden. Es gibt eine entsprechende Umgebung dafür. Das kannst du sehen, wenn Du mal einen Artikel zitierst. Auch wikipedia verwendet LaTeX in fast gleicher form (siehe hier)
Jedenfalls gilt es die Multiuplikation einfach als eine endliche Reihe von Additionen darzustellen, was es am Ende ja auch nur ist... Also eine Multiplikation ist abstrakt gesehen nichts weiter als die Kurzschreibweise für eine Reihe von Additionen.
Bsp.:
usw...
Damit wird eigentlich auch schon klar, was gemacht werden muss. Das Ergebnis ist am Anfang 0 und wird dann a mal um b erhöht.... Ich habe mal mein Programm entsprechend modifiziert:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
|
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv){
int a = 123;
int b = 456;
int result = 0;
while(a--){
result += b;
}
printf("%d\n", result);
return 0;
}
|
|
Verwendet werden hier eben nur besagte Addition und Subtraktion. Eine Schleife ist notwendig, da entschieden werden muss, wann die Multiplikation vollständig ist.
VG,
Karlito
|
|
28.03.2014 12:18 |
|
|
|