Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Prośba o sprawdzenie zadania domowego numer 2 rozdział 53

Ostatnio zmodyfikowano 2022-01-05 15:26
Autor Wiadomość
Masterofironfist
Temat założony przez niniejszego użytkownika
» 2022-01-05 14:52:25
C/C++
#include <iostream>
using namespace std;

unsigned int multiplication( unsigned int a, unsigned int b )
{
   
unsigned int aCopy = a;
   
a = 0;
   
for( int i = 31; i >= 0; i-- )
   
{
       
if(( b & 1 << i ) != 0 )
       
{
           
a +=( aCopy << i );
       
}
    }
   
return a;
}

int main()
{
   
unsigned int a, b;
   
cin >> a >> b;
   
cout << "a = " << multiplication( a, b );
}
Proszę oto kolejna wersja programu. Nie wierze że teraz wystarczy 1 linia kodu w warunku i program realizuje to samo jest pan prawdziwym mistrzem programowania.
Dziękuje za pańską pomoc przy tym programie, bo inaczej bym nie uwierzył że można to tak prosto zapisać.
P-179179
pekfos
» 2022-01-05 15:13:03
Takie rozwiązanie jest zadowalające, dobra robota. Co do czytelności, jeśli zerujesz argument funkcji, to może być to znak że należy zostawić go w spokoju (albo usunąć). Zamiast robić kopię argumentu w dodatkowej zmiennej, możesz w tej zmiennej mieć wynik który obliczasz.
Dla samej ciekawostki pokażę jeszcze jak można usunąć dekrementację z pętli i przy okazji przywrócić wcześniejszy koniec algorytmu:
C/C++
unsigned int multiplication( unsigned int a, unsigned int b )
{
   
unsigned int result = 0;
   
   
while( b != 0 )
   
{
       
if( b & 1 )
           
 result += a;
       
       
a <<= 1;
       
b >>= 1;
   
}
   
   
return result;
}
Z każdym przebiegiem dzielę mnożnik przez 2 i koryguję to w mnożnej. Gdy ostatnia jedynka wyjdzie z mnożnika, algorytm się kończy.
P-179180
Masterofironfist
Temat założony przez niniejszego użytkownika
» 2022-01-05 15:26:09
Bardzo ciekawe. No teraz widzę jak ważna jest optymalizacja. Dziękuje za całą pomoc. A także za ciekawą przygodę z podstawami C++. Ogólnie bardzo to ciekawe wszystko. Pańskie rozwiązanie również jest bardzo ciekawe. A teraz chyba czas zamknąć ten wątek bo chyba można uznać go za rozwiązany.
P-179181
1 2 « 3 »
Poprzednia strona Strona 3 z 3