Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 13 odgovora
  • 8.116 pregleda

Najnovija ↓

Multiplikativna otpornost broja 29.12.2010. u 18:20 · pre 192 meseca #1
eiii ljudi ;)

Nadam se da mi neko od programera moze pomoci...

Imam zadatak :

Neka je n1 proizvod cifara broja n, n2 proizvod cifara broja n1, n3 proizvod cifara broja n2 itd... najmanji broj k za koji vrijedi da je nk jednocifren broj naziva se multiplikativna otpornost broja n.
Npr. multiplikativna otpornost broja 6788 iznosi 6 , jer je
n1=6*7*8*=2688,
n2=2*6*8*8=768,
n3=7*6*8=336,
n4=3*3*6=54,
n5=5*4=20,
n6=2*0=0;

Napisati program za prirodan broj n unijet sa tastature racunara i ispisuje njegovu multiplikativnu otpornost ...
Re: Multiplikativna otpornost broja 30.12.2010. u 13:08 · pre 192 meseca #2
Code:
#include <iostream>
#include <string>
#include <vector>

using namespace std;

void process(vector<char> &n) {
    while (n.size() > 1) {
        for (size_t i = 0; i < n.size(); ++i) {
            if (n[i] == 0) {
                n.clear();

                return;
            }
        }

        vector<char> n1;

        n1.push_back(1);

        for (size_t i = 0; i < n.size(); ++i) {
            int digit = n[i];

            for (size_t j = 0; j < n1.size(); ++j) {
                n1[j] *= digit;
            }

            char carry = 0;

            for (size_t j = 0; j < n1.size(); ++j) {
                char value = n1[j] + carry;

                carry = value / 10;
                n1[j] = value - 10*carry;
            }

            if (carry > 0) {
                n1.push_back(carry);
            }
        }

        n = n1;
    }
}

int main() {
    string input;
    cin >> input;
    vector<char> n;

    for (int i = input.size() - 1; i != -1; --i) {
        n.push_back(input[(size_t) i] - '0');
    }

    process(n);

    if (n.empty()) {
        cout << "0";
    } else {
        for (int i = n.size() - 1; i != -1; --i) {
            cout << ((int) n[(size_t) i]);
        }
    }

    cout << endl;

    return 0;
}
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Multiplikativna otpornost broja 30.12.2010. u 15:40 · pre 192 meseca #3
Moze to i malo jednostavnije:

Code:

#include <cstdlib>
#include <cmath>
#include <string>
#include <iostream>

int product(int value) {
    int result = 1;
    for(int operv=std::abs(value); operv > 0; ) {
        result *= (operv % 10);
        operv = static_cast<int>(std::floor(operv / 10.0f));
    }
    return result;
}

int process(int value) {
    int result = 0;
    for (result=1, value=product(value); value > 0; ++result) {
        value=product(value);
    }
    return result;
}


int main(void) {
    
    int input = 0;
    std::cin >> input;

    std::cout << process(input) << std::endl;
    
    return EXIT_SUCCESS;
}
Potpis
Tko leti vrijedi
Re: Multiplikativna otpornost broja 30.12.2010. u 16:05 · pre 192 meseca #4
A šta ako ti korisnik unese broj sa 1000 cifara? Moj program radi i u tom slučaju.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Multiplikativna otpornost broja 30.12.2010. u 17:59 · pre 192 meseca #5
Tvoj program svakako podrzava mnogo vece brojeve od mog ali ipak ima ogranicenje u smislu da proizvodi cifara unetog broja ne moze da bude veci od INT_MAX - sto naravno pogadja i moju verziju.

Resenje za bilo koji broj bi moglo da se izvede uz koriscenje neke od biblioteka za velike brojeve kao bigint - https://mattmccutchen.net/bigint/

Potpis
Tko leti vrijedi
Re: Multiplikativna otpornost broja 30.12.2010. u 18:19 · pre 192 meseca #6
Hvala Vam punoooo na pomoci oko zadatka...
Takoder zelim Vam sve najbolje u narednoj 2011.-toj godini.
Re: Multiplikativna otpornost broja 30.12.2010. u 20:20 · pre 192 meseca #7
Citat:
kiklop74: Tvoj program svakako podrzava mnogo vece brojeve od mog ali ipak ima ogranicenje u smislu da proizvodi cifara unetog broja ne moze da bude veci od INT_MAX - sto naravno pogadja i moju verziju.

Resenje za bilo koji broj bi moglo da se izvede uz koriscenje neke od biblioteka za velike brojeve kao bigint - https://mattmccutchen.net/bigint/


Odakle ti to uopšte? Moj program nema nikakva ograničenja osim raspoložive memorije. Proizvod cifara se ne računa kao int, nego kao string cifara. Dakle, rezultat množenja cifara je opet string.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Multiplikativna otpornost broja 31.12.2010. u 09:05 · pre 192 meseca #9
Aj jedno laičko pitanje.
Čemu uopšte služi ta multiplikativna otpornost?
Ima neku upotrebnu vrednost ili čisto služi profanima za ispitna pitanja?
Re: Multiplikativna otpornost broja 31.12.2010. u 09:49 · pre 192 meseca #10
Biće da je to drugo.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Multiplikativna otpornost broja 04.01.2011. u 15:03 · pre 192 meseca #11
Zanimljivo je da nijedan od dva priložena programa nije tačan.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Re: Multiplikativna otpornost broja 04.01.2011. u 17:20 · pre 192 meseca #12
Mda, u pravu si.

U slucaju primera koji sam poslao treba modifikovati uslov u petlji u funkciji process

Code:


int process(int value) {
    int result = 0;
    for (result=1, value=product(value); value > 9; ++result) {
        value=product(value);
    }
    return result;
}

Potpis
Tko leti vrijedi
Re: Multiplikativna otpornost broja 23.11.2011. u 20:34 · pre 181 mesec #13
mislim da je ovo zadatak namijenjen za pocetnike pa da nebismo komlikovali evo jednostavno rjesenje...

#include <iostream>
using namespace std;
int main()
{
long long n,m,v(0),d(1);
cin>>n;
m=n;
while (1)
{while (m!=0)
{ d=d*(m%10); m=m/10;} v++; if (d<10) break; else {m=d; d=1;}}
cout<<v;
system("pause");
return 0;
}
Re: Multiplikativna otpornost broja 04.05.2016. u 23:27 · pre 127 meseci
izmenjeno 1 put, poslednji put mustafa12 05.05.2016. u 00:11
  1. mustafa1205.05.2016. u 00:11zapis iz teksta poruke
#14
zadnje rjesenje je najbolje i najbrze
Potpis
Musto
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme