AtCoder-Anfängerwettbewerb 176 B Problem "Multiple of 9" Erläuterung (Python3, C ++, Java)

Das ist Rute. Dieser Artikel ist eine Fortsetzung des vorherigen Ein Problem </ b> -Kommentars!

Links zu jedem Problem / jeder Erklärung

A B C
ABC176 A DieserBeitrag!!! ABC176C

Jetzt werde ich das B-Problem </ b> erklären.

Problemzusammenfassung

Bestimmen Sie, ob $ N $ ein Vielfaches von $ 9 $ ist.

Zwang

・ $ 0 \ leq N \ leq 10 ^ {200000} $ ・ $ N $ ist eine ganze Zahl

Bitte beachten Sie, dass sich die Lösungsmethode diesmal zwischen Python3, C ++ und Java unterscheidet.

Kommentar

Lösung 1 (für Python 3)

  • Sie können es auch mit Lösung 2 lösen, die später erläutert wird. Im Fall von Python3 gibt es keine Begrenzung für die Anzahl der Ganzzahlen, die durch den Typ int </ b> dargestellt werden können. Sie können also AC schreiben, indem Sie den folgenden bedingten Zweig schreiben! (Genau genommen kann es Ganzzahlen mit mehreren Längen verarbeiten) </ font>

{ABC176B.py}


print("Yes") if int(input())%9 == 0 else print("No")
  • Der Code wurde hier gekürzt, aber es gibt kein Problem, wenn Sie ihn lösen, ohne ihn zu kürzen.

Lösung 2 (für C ++ und Java)

Achten wir auf diese Einschränkung. ・ $ 0 \ leq N \ leq 10 ^ {200000} $ </ font>

Ja, der Bereich von $ N $ beträgt bis zu $ 10 ^ {200000} $. Da $ 10 ^ {64} $ 1 unendliche Zahl </ b> ist, ist $ 10 ^ {200000} $ eine enorm große ganze Zahl </ b>.

In C ++ kann eine solche Ganzzahl nicht durch den Typ int oder sogar den Typ long long int dargestellt werden. </ font> (In Java ist dies der "lange" Typ)

Lassen Sie uns also die Art der Vielfachen von 9 $ überprüfen. Schauen Sie sich zunächst dieses Video an.

Die Art der Vielfachen von 9 (Quelle: Trivia Fountain)




Die Antwort auf das Multiplizieren von 9 lautet immer 9, wenn Sie die Zahlen addieren </ font>

Dies entspricht . Die Summe der Ziffern ist durch $ 9 $ </ b> teilbar, wenn es sich um ein Vielfaches von $ 9 $ handelt. (Ähnlich wie in der Problemstellung angegeben) </ font> Mit anderen Worten, ich konnte es durch das einfache Problem ersetzen, festzustellen, ob die Summe der Ziffern durch $ 9 $ </ b> teilbar ist. Es dauert lineare Zeit für die Länge der Zeichenfolge </ b>, um die Summe der Ziffern zu finden, aber innerhalb der Einschränkungen ist es Zeit für das Ausführungszeitlimit.

Das folgende Beispiel zeigt die Lösung in Lösung 2 in drei Sprachen: Python3, C ++ und Java.

Beispiel für eine Antwort für jede Sprache (Lösung 2)

Beispiellösung in Python3

{ABC176B2.py}


N = input()
ans = 0
for i in range(len(N)):
  ans += N[i]
print("Yes") if ans%9 == 0 else print("No")
Lösungsbeispiel in C ++

{ABC176B2.cpp}


#include<bits/stdc++.h>
using namespace std;
int main(){
  string s;
  cin >> s;
  int ans = 0;
  for (int i = 0; i < s.size(); i++){
    ans = ans +  int(s.at(i))-48;
  }
  if (ans%9==0){
    cout << "Yes" << endl;
  }else{
    cout << "No" << endl;
  }
}

  • Die Summe der Ziffern wurde anhand der Art des ASCII-Codes berechnet. Im ASCII-Code ist "0" "48" und "9" "57", sodass Sie die Zeichenfolge in eine Ganzzahl konvertieren können, indem Sie 48 vom ASCII-Code subtrahieren.
Java-Antwortbeispiel

{ABC176B2.java}


import java.util.Scanner;
public class Main{
  public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String S = scan.next();
    int ans = 0;
    for (int i = S.length(); i > 0 ; i--){
      ans = ans + Integer.parseInt(S.substring(i-1,i));
    }
    if (ans % 9 == 0){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }
}

Recommended Posts