Հանեք ամբողջ Leetcode լուծույթի արտադրանքը և թվերի գումարը


Դժվարության մակարդակ Հեշտ
Հաճախակի հարցնում են Cisco Google Uber
Մաթեմատիկա

Խնդիրի հայտարարություն

Այս խնդրում մենք պետք է գտնենք թվերի արտադրյալի և տրված թվանշանների գումարի տարբերությունը պոզիտիվ ամբողջ թիվ

Օրինակ

1234
14

բացատրությունԱրտադրանք = 4 * 3 * 2 * 1 = 24 և գումար = 4 + 3 + 2 + 1 = 10. Այսպիսով, տարբերությունը 14 է

2045
-11

բացատրությունԱրտադրանք = 2 * 0 * 4 * 5 = 0 և Գումար = 2 + 0 + 4 + 5 = 11. Այսպիսով, տարբերությունը -11 է:

Մոտեցում

Դյուրին է դառնում վերադարձնել ցանկալի արդյունքը, եթե մենք կարողանանք մեկից մեկ դուրս բերել թվանշանները ամբողջ թվից: Դա կարելի է հեշտությամբ անել ՝ օգտագործելով «%» օպերատորը, քանի որ «% 10» -ը բերում է մեզ ամբողջ ամբողջ թվանշանի վերջին նիշը, այնուհետև մենք կարող ենք բաժանել ամբողջ թիվը 10-ի վրա, որպեսզի դուրս գա դրա վերջին թվանշանը (ինչպես դա արեցինք սա խնդիր): Այսպիսով, մենք կարող ենք մշակել յուրաքանչյուր նիշ և գտնել արտադրանքը և գումարը: Այնուհետև, մենք կարող ենք վերադարձնել նրանց միջև եղած տարբերությունը `պահանջվող արդյունք ստանալու համար:

Հանեք ամբողջ Leetcode լուծույթի արտադրանքը և թվերի գումարը

Ալգորիթմ

  1. Նախաձեռնեք երկու փոփոխական, արտադրանք = 1 եւ գումար = 0 ՝ ամբողջ թվերի արտադրանքը և թվանշանների գումարը պահելու համար N համապատասխանաբար
  2. Հետևեք այս քայլերին մինչև N> 0:
    1. Բազմապատկել N- ի վերջին նիշը արտադրանք, արտադրանք * = N% 10
    2. Ավելացնել N- ի վերջին նիշը գումար, գումար + = N% 10
    3. Բաժանել N 10-ով `վերջին նիշը գցելու համար, N / = 10
  3. Վերադառնալ ապրանք - գումար

Ամբողջ Leetcode լուծույթի հանման արդյունքի և թվերի գումարի իրականացում

C ++ ծրագիր

#include <bits/stdc++.h>
using namespace std;

int subtractProductAndSum(int n)
{
    int product = 1 , sum = 0;
    while(n > 0)
    {
        //n % 10 extracts the last digit out of N
        product *= (n % 10);
        sum += (n % 10);
        n /= 10;
    }
    return product - sum;
}

int main()
{
    int n = 1234;
    cout << subtractProductAndSum(n) << '\n';
    return 0;
}

Java ծրագիր

class subtract_product_and_sum
{
    public static void main(String args[])
    {
        int n = 1234;
        System.out.println(subtractProductAndSum(n));
    }

    static int subtractProductAndSum(int n)
    {
        int product = 1 , sum = 0;
        while(n > 0)
        {
            //n % 10 extracts the last digit out of N
            product *= (n % 10);
            sum += (n % 10);
            n /= 10;
        }
        return product - sum;
    }
}
14

Ամբողջ Leetcode լուծույթի արտադրանքի և թվանշանների գումարի հանման բարդության վերլուծություն

Timeամանակի բարդություն

O (տեղեկամատյան2â € <N) քանի որ յուրաքանչյուր ամբողջ թվանշանի համար օղակ ենք նետում N ամբողջ թվին:

Տիեզերական բարդություն

Ո (1) քանի որ մենք օգտագործում ենք հիշողության անընդհատ տարածություն: