عدد صحیح را به مجموع دو راه حل کد صحیح بدون صفر تبدیل کنید


سطح دشواری ساده
اغلب در HRT
ریاضی

مسئله تبدیل عدد صحیح به مجموع دو عدد صحیح بدون صفر با راه حل کد از ما خواست که داده را تقسیم کنیم عدد صحیح. عدد صحیح داده شده را باید به دو عدد تقسیم کنیم. محدودیتی برای این دو عدد صحیح اعمال شده است. این دو عدد صحیح نباید حاوی رقم 0 باشند. برای درک بهتر ، نگاهی به چند مثال خواهیم انداخت.

عدد صحیح را به مجموع دو راه حل کد صحیح بدون صفر تبدیل کنید

n = 2
[1,1]

توضیح: دو عدد صحیح در خروجی 1 و 1 است. اعداد صحیح می توانند یکسان باشند اما نباید عدد 0 داشته باشند. محدودیت در خروجی برآورده می شود. مجموع هر دو عدد صحیح نیز برابر با ورودی است. بنابراین خروجی صحیح است.

n = 1010
[11, 999]

توضیح: خروجی صحیح است زیرا مجموع هر دو عدد صحیح برابر با 1010 است. و همچنین هیچ رقمی برابر با 0 ندارند.

رویکرد تبدیل عدد صحیح به مجموع دو راه حل کد صحیح بدون صفر

این مشکل از ما خواست که ورودی داده شده را به دو عدد صحیح تقسیم کنیم. شرطی که باید رعایت شود قبلاً در توضیحات بالا بیان شده است. شرط اول این است که مجموع اعداد صحیح باید برابر عدد صحیح داده شده باشد. دو عدد صحیحی که به عنوان خروجی بازگردانده می شوند ، نباید 0 رقم داشته باشند. برای حل مسئله ، یک حلقه را روی اولین عدد صحیح اجرا می کنیم که از 1 تا n محدوده دارد. عدد صحیح دوم را می توان از رابطه اول استنباط کرد. سپس بررسی می کنیم که آیا هر دو عدد صحیح شرط دوم را برآورده می کنند.

برای بررسی شرط دوم ، یک تابع سفارشی ایجاد می کنیم که یک عدد صحیح را به عنوان ورودی در نظر می گیرد. بسته به اینکه عدد صحیح داده شده شامل 0 باشد یا نه ، درست یا نادرست برمی گردد. برای بررسی اینکه ما به سادگی به حذف ارقام ادامه می دهیم یکی از انتها.

رمز

کد ++ C برای تبدیل عدد صحیح به مجموع دو راه حل کد صحیح بدون صفر

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

bool check(int n){
    while(n>0){
        if(n%10 == 0)
            return false;
        n/=10;
    }
    return true;
}

vector<int> getNoZeroIntegers(int n) {
    for(int i=1;i<n;i++){
        if(check(i) && check(n-i))
            return {i, n-i};
    }
    return {-1,-1};
}

int main(){
    int input = 1010;
    vector<int> output = getNoZeroIntegers(input);
    cout<<output[0]<<" "<<output[1];
}
11 999

کد جاوا برای تبدیل عدد صحیح به مجموع دو راه حل کد صحیح بدون صفر

import java.util.*;
import java.lang.*;
import java.io.*;

class Main
{
  private static boolean check(int n){
        while(n>0){
            if(n%10 == 0)return false;
            n/=10;
        }
        return true;
    }
    
    public static int[] getNoZeroIntegers(int n) {
        for(int i=1;i<n;i++){
            if(check(i) && check(n-i))
                return new int[]{i, n-i};
        }
        return new int[]{-1,-1};
    }
    
  public static void main (String[] args) throws java.lang.Exception{
    int input = 1010;
      int[] output = getNoZeroIntegers(input);
      System.out.print(output[0]+" "+output[1]);
  }
}
11 999

تحلیل پیچیدگی

پیچیدگی زمان

O (NlogN) ، که در آن N عدد صحیحی است که به عنوان ورودی داده می شود. این log دارای پایه 10 است زیرا عملکرد ما بررسی می کند که آیا عدد صحیح دارای 0 است یا در زمان logN کار نمی کند.

پیچیدگی فضا

O (1) ، ما هیچ اطلاعاتی را ذخیره نمی کنیم. و کل الگوریتم از تعداد ثابت متغیرها استفاده می کند. بنابراین پیچیدگی فضا ثابت است.