Zählen Einsätze

Kann mir jemand sagen, warum mein Programm immer falsch beantwortet? Es muss die Anzahl der Einsätze in einer Summe. Ich habe versucht, jeden testcase kam mir in den Sinn. Habe ich nicht bekommen, falsche Ausgabe.

Problem Beschreibung:

Kindern beigebracht wird, dass zum hinzufügen von multi-stellige zahlen, die von rechts nach Links eine Ziffer zu einem Zeitpunkt. Viele finden die "carry" - Betrieb, in dem Sie einen 1 erfolgt von einer Stelle Hinzugefügt werden, die nächsten zu sein, ist eine große Herausforderung. Ihre Aufgabe ist es, die Anzahl der Einsätze für jedes von einer Reihe von Zusatz Probleme damit, dass Lehrer bewerten können, Ihre Schwierigkeit hat.

Eingang

Jede Zeile der Eingabe enthält zwei ganze zahlen ohne Vorzeichen, die weniger als 10 Ziffern. Die Letzte Zeile der Eingabe enthält 0 0.

Ausgabe

Für jede Zeile außer der letzten, sollten Sie berechnen und drucken der Anzahl der Einsätze, die entstehen aus der addition der zwei zahlen im format unten dargestellt.

Beispiel Für Die Eingabe

123 456
555 555
123 594
0 0

Beispiel-Ausgabe

No carry operation.
3 carry operations.
1 carry operation.

Hier ist meine aktuelle code:

#include<stdio.h>
int main()
{
    unsigned long long int a,b,m,n,rem_m,rem_n,judge=0,sum,count;
    while((scanf("%llu%llu",&m,&n))==2)
    {
        if(m==0 && n==0)
        {
            break;
        }
        count=0;
        while(m!=0 && n!=0)
        {
            rem_m=m%10;
            rem_n=n%10;
            if(judge==1)
            {
                rem_m++;
            }
            sum = rem_m+rem_n;
            judge=0;
            if(sum>=10)
            {
                count++;
                judge++;
            }
            m=m/10;
            n=n/10;
        }
        if(count==0)
        {
            printf("No carry operation.\n");
        }
        else
        {
            printf("%llu carry operations.\n",count);
        }
    }
    return 0;
}
  • Was ist also das problem? nicht immer eine Antwort für "0 0"?
  • beim kompilieren, aktivieren Sie immer alle Warnhinweise (für gcc, mindestens: -Wall -Wextra -pedantic), dann beheben Sie die Warnungen. zum Beispiel: für den geposteten code, der compiler warnen, nicht verwendete variable 'a' und nicht verwendete variable 'b'. Empfehlen Platzierung jedes Variablen-Deklaration in einer separaten Zeile, zur besseren Lesbarkeit durch uns Menschen und für die einfache Dokumentation.
  • der code sollte eine entsprechende Aufforderung ausgegeben am Anfang. andernfalls ist er mit nichts mehr übrig, aber ein blinkender cursor und ohne Hinweis darauf, was Sie als Nächstes tun sollten.
  • die variable count kann nie größer als 10 also, warum machen es zu einem "anzeiiri' variable?
  • die variable judge können niemals etwas anderes sein als 1 oder 0 sein, also warum sollte es ein "anzeiiri' variable? Auch der name judge ist sinnlos, in den aktuellen Kontext. Vorschlagen, etwas sinnvolles wie: carry
  • dieser code-block: ` wenn(Richter==1) { rem_m++; } sum = rem_m+rem_n;` kann vereinfacht werden zu: ` Summe = rem_m+rem_n+PR;`
  • Prüfung der code funktioniert einwandfrei, also, was ist die Frage?
  • da die Kriterien, die zahlen sind weniger als 10 Ziffern. jeder Wert Eingabe muss überprüft werden, um sicherzustellen, es ist <= 99999999

Schreibe einen Kommentar