Ein Programm zu schreiben, finden Sie die Summe der positiven ungeraden zahlen, und das Produkt der positiven geraden zahlen kleiner oder gleich 30
Ich habe einige Probleme mit dem schreiben ein C-Programm für diese Frage. Vielleicht bin Lesen die Frage falsch und Sie tun es der falsche Weg. Könnte jemand mir helfen bitte? Dies ist die Art, wie ich versuche, es zu tun
#include<stdio.h>
void main(void)
{
int j, sum=0;
long int product=1;
for(j=1;j<=30;j=j+2)
{
sum=sum+j;
}
for(j=2;j<=30;j=j+2)
{
product=product*j;
}
printf("\nThe sum of positive odd numbers is: %d", sum);
printf("\nThe product of positive even numbers is: %d", product);
}
Den Ausgang bin ich immer:
The sum of positive odd numbers is: 225
The product of positive even numbers is: -1409286144
Ich bin immer das Produkt Teil falsch. Ich habe versucht mit unsigned long int, long long, unsigned long long. Nichts funktioniert.
- Ihr Produkt ist überfüllt, die Grenzen Ihrer storage-Typ. Versuchen swapping von einer
long int
zu einem größeren Speicher geben. - 2*4*8...*28 gibt etwa eine 30-stellige Zahl. Wirst du ziemlich viel brauchen, eine floating-point-Typ zu halten. Für was es Wert ist: die Summe von N aufeinanderfolgenden ungeraden zahlen (beginnend mit 1) ergibt N-Quadrat, so kann man berechnen, dass ein Teil ein wenig mehr schnell und einfach.
- Verwenden modulo anstatt zu kondensieren, code 1 Schleife. pseudocode - for (j=1,j<=30,j++) If j%2=0, dann product=product*j, else Summe=Summe+j
- Ihre Antwort sollte nur die passen in einen 64-bit integer-Zahl.
- Gah kann nicht gelöscht werden Kommentare und StackOverflow-URL-parser ist kaputt
- Die schiere Größe dieses Produkt ist eine sanfte Erinnerung daran, dass wir sollten in der Furcht Leben, von algorithmen, Fakultät Zeitkomplexität!! =)
main
zurückint
, nichtvoid
. Wer oder was auch immer Ihnen sagte, dassvoid main(void)
wahrscheinlich weiß nicht C sehr gut. Hüten Sie sich vor.- Keine standard-floating-point-Typ, das Ergebnis; IEEE-double hat nur 52 bit Genauigkeit.
- Rechts -- keiner von Ihnen werde zu halten, um zu voller Präzision, aber zumindest können Sie repräsentieren eine Zahl in der Nähe von 1e30 ohne überzulaufen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit
%ld
statt%d
in Ihremprintf
:printf("\nThe product of positive even numbers is: %ld", product);
Da es ein
long int
und nicht einint
.Wenn Sie
long long int
wollen Sie%lld
. Sie müssen möglicherweise die lange Größe, gegeben, dass dies ein sehr sehr großes Produkt. Ich weiß nicht, ob Ihre Plattformlong int
ist 32 oder 64 bit, aber Sie werden sicherlich brauchen ein 64-bit-Zahl hier.Den
long long
format-string können variieren je nach Ihren genauen Plattform-und compiler, aber vor allem Dinge haben standardisiert auf%lld
heute. Insbesondere die alten Microsoft-Compilern manchmal%I64d
.%ld
imprintf()
produziert eine falsche Ausgabe (negative Zahl) sowohl in meinem compiler Mingw undideone
ideone.com/GRSMLElong long int
.Gibt es keine Probleme, soweit die Summe aller ungeraden zahlen kleiner als 30 ist besorgt, wie es nur
225
.Aber das Produkt aller geraden zahlen (oder ungeraden zahlen, für diese Angelegenheit) weniger als 30, ist eine enorme Anzahl.Dafür brauchen Sie einen Datentyp mit größerer Kapazität.Im folgenden Programm habe ich einfach verwendetdouble
stattlong int
fürproduct
und die habe ich genutzt%e
Formatbezeichner um das Produkt anzuzeigen inprinf()
in eine nette Möglichkeit, wenn man%f
als gut.Ausgabe
The sum of positive odd numbers is: 225
%ld
imprintf()
Ihr problem lösen, wie pro die poster oben vorgeschlagen?Es fand falsche Ergebnis drin. ideone.com/GRSMLEdouble
kann eine gute Annäherung ist aber unwahrscheinlich, dass die tatsächliche richtige Antwort. Je nach Ihren Bedürfnissen kann es ausreichend sein.long long int
werden präzise, sondern wird auch scheitern, wenn das Ergebnis wächst > 2^64, während diedouble
funktioniert weiterhin nur mit verringerter Präzision.long long int
.long int
.So StilesCrisis ist richtig,es ist nur so, dasslong int
ist nicht genug, in einem 32-bit system wie meins.berechnen, verwenden unsinged int (32bit)