Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- char n1[10000010], n2[10000010];
- char resp1[20], resp2[20];
- int main() {
- scanf(" %s %s", n1, n2);
- //A posição a ser eliminada recebe -1
- int t1 = strlen(n1) - 1, t2 = strlen(n2) - 1;
- while(t1 >= 0 && t2 >= 0){
- if(n1[t1] > n2[t2]) n2[t2] = -1;
- else if(n1[t1] < n2[t2]) n1[t1] = -1;
- t1--;
- t2--;
- }
- //Anexa no vetor "resposta" os números diferentes de -1
- t1 = 0;
- for(int i = 0; i < strlen(n1); i++){
- if(n1[i] != -1){
- resp1[t1] = n1[i];
- t1++;
- }
- }
- if(t1 == 0) printf("-1");
- resp1[t1] = '\0';
- t2 = 0;
- for(int i = 0; i < strlen(n2); i++){
- if(n2[i] != -1){
- resp2[t2] = n2[i];
- t2++;
- }
- }
- if(t2 == 0) printf("-1");
- resp2[t2] = '\0';
- //Eventualmente o resp pode ser uma string de 0's, assim, queremos apenas um 0
- //Calcula quantos zeros resp1 possuí
- int zeros = 0;
- for(int i = 0; i < strlen(resp1); i++){
- if(resp1[i] == '0') zeros++;
- }
- //Se a quantidade de zeros é igual ao tamanho do número, significa que ele é composto só de zeros e deve ser transformado em 0 (um único 0).
- if(zeros > 0 && zeros == strlen(resp1)){
- resp1[0] = '0';
- resp1[1] = '\0';
- }
- //Mesmo processo, só que para resp2
- zeros = 0;
- for(int i = 0; i < strlen(resp2); i++){
- if(resp2[i] == '0') zeros++;
- }
- if(zeros > 0 && zeros == strlen(resp2)){
- resp2[0] = '0';
- resp2[1] = '\0';
- }
- //Retorna na saída primeiro o número com menor quantidade de dígitos
- if(strlen(resp1) > strlen(resp2)) printf("%s %s", resp2, resp1);
- else if(strlen(resp2) > strlen(resp1)) printf("%s %s", resp1, resp2);
- //Se a quantidade de dígitos for igual, é preciso ver quem é maior lexicograficamente.
- else{
- if(strcmp(resp1, resp2) < 0) printf("%s %s", resp1, resp2);
- else if(strcmp(resp1, resp2) > 0) printf("%s %s", resp2, resp1);
- else printf("%s %s", resp1, resp2);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement