Ich muss ein Programm in C schreiben, das eine Basis b
vom Benutzer nimmt (vorausgesetzt, b ist zwischen 2 und 10), eine natürliche Zahl n
und dann n
Zahlen, die die Ziffern einer Nummer m
in Basis b
darstellen. Das Programm sollte ausdrucken, welche Dezimalzahl m
eingegeben wurde. Zum Beispiel, wenn Sie setzen b=5
und n=4
und dann die Zahlen 3
, 4
, 2
und 1
das Programm ausgeben sollte 486
weil m=3*5^3+4*5^2+2*5^1+1*5^0=486
Schreibe ein Programm in C, das eine Basis und n Ziffern nimmt und eine Dezimalzahl mit diesen Ziffern ausgibt
Hinweis: Sie können davon ausgehen, dass die Ziffern die Zahlen zwischen 0
sein und b-1
.
Also hier ist was ich getan habe:
#include<stdio.h>
#include<math.h>
int main(void) {
int x,n,b,k=0,num=0,i,j;
scanf("%d", &b);
scanf("%d", &n);
for(i=1; i<=n; i++) {
scanf("%d", &x);
for(j=1; j<b; j++){
if(j>k){
num=num+x*(pow(b,n-j));
k=j;
break;
}
}
}
printf("m=%d", num);
return 0;
}
Können Sie mir sagen, warum dies nicht für die Zahlen in dem oben angegebenen Beispiel funktioniert? Es gibt 485
statt 486
aus, während wenn ich zum Beispiel b=7, n=3
und dann Nummern 5, 6
und 1
nehme, bekomme ich die richtige Lösung m=288
.
ist SO kein Debugging-Service. Kompilieren Sie mit Symbolen, führen Sie den Code in einem Debugger aus, um das/die Programm (e) Zeile für Zeile zu verfolgen und die Werte der relevanten Variablen zu untersuchen, um zu erfahren, was wirklich vor sich geht. Wenn dann eine * spezifische * Frage aufkommt, fühlen Sie sich frei, hierher zurückzukommen. – alk
Es ist ein * Fehler *, den Rückgabewert von 'scanf' nicht zu überprüfen. –
Verwenden Sie 'pow' nicht für einfache Ganzzahlarithmetik wie diese. –