2020 SWJTU-ICPC Formación Ronda # 2 (18 años carrera de Fujian) parte de la solución a un problema

calculadora A-Uint47 (multiplicación rápida)

Significado de las preguntas:

La definición de un montón de variables y luego sumar o restar, multiplicar y dividir las operaciones

ideas:

Esta pregunta es difícil de colocar en la multiplicación, excedería el alcance de un largo tiempo por lo que necesitan para multiplicarse rápidamente (principio similar con potencia rápido)

 

#include <iostream> 
#include <algoritmo> 
#include <vector> 
#include <mapa> 
#include < string >
 #define Endl endl
  utilizando  espacio de nombres std;
 typedef largo  largo ll;
 const ll mod = 1LL << 47 ;
 mapa < cadena , ll> m;
 secuencia S1, S2, S3;
 ll qm (ll a, ll b)
 {
     ll ans = 0 ;
     mientras que (b) {
          si (b% 2 ) ans = (ans + a)% mod;
        un = (a + a)% mod;
        b / = 2 ;
     }
    volver ans;
 }
 int main ()
 {
     ll num;
     mientras que (cin >> >> s1 s2) {
          si (s1 == " def " ) cin >> num;
         otra cosa {
             cin >> s3;
             si (s1 == " añadir " ) num = (m [s2] + m [S3])% mod;
             si (s1 == " sub " ) num = (m [s2] -m [S3] + mod)% mod;
             si (s1 == " mul " ) num = qm (m [s2], m [S3]);
             si (s1 == " div " ) num = m [s2] / m [S3];
             si (s1 == " mod " ) num = m [s2]% m [S3];
         }
         si (num < 0 ) num + = mod;
         m [s2] = num;
         cout << << s2 " = " << num << endl;
     }
     volver  0 ;
 }
Ver código

 

Supongo que te gusta

Origin www.cnblogs.com/overrate-wsj/p/12499890.html
Recomendado
Clasificación