Chewbacca and Number

Luke Skywalker gave Chewbacca an integer number x. Chewbacca isn’t good at numbers but he loves inverting digits in them. Inverting digit t means replacing it with digit 9 - t.

Help Chewbacca to transform the initial number x to the minimum possible positive number by inverting some (possibly, zero) digits. The decimal representation of the final number shouldn’t start with a zero.

Input Format

The first line contains a single integer x (1 ≤ x ≤ 10^18) — the number that Luke Skywalker gave to Chewbacca.

Constraints

x <= 100000000000000000

Output Format

Print the minimum possible positive number that Chewbacca can obtain after inverting some digits. The number shouldn’t contain leading zeroes.

Sample Input

4545

Sample Output

4444

my code:-
import java.util.*;
public class Main {
public static void main(String args[]) {
// Your Code Here
// TODO Auto-generated method stub
Scanner t=new Scanner(System.in);
long n=t.nextLong();
long d=n;
long x=0;
long rem=0;
long rev=0;

	while(d!=0)
	{
		rem=d%10;
		x=9-rem;
		if(x<rem)
		{
			rev=rev*10+x;
			
		}
		else if (x>rem)
		{
			rev=rev*10+rem;
		}
        else if(x==0)
        {

        }
		d=d/10;
        

        
        
	}
	long m=rev;
	long rem2=0;
	long rev2=0;
	while(m!=0)
	{
		rem2=m%10;
		rev2=rev2*10+rem2;
		m=m/10;
	}
	System.out.println(rev2);
}

}

issue is i dont know how to make it work for , numbers starting with 9, please explain
ex:- 9999 should give 9000 output

1 Like

so I did it this way,

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

int main() {
string x;
cin>>x;
bool flag = false;
for(int i=0; i<x.length(); i++){
if(i==0 && ((x[i]-‘0’)==9) ){
flag = true;
continue;
}
if( (x[i]-‘0’ ) >= 5 ){
x[i] = (9 - (x[i]-‘0’))+‘0’;
}
}
cout<<x<<endl;
return 0;
}

if (digit >=5 && digit <=9){
digit1 = 9-digit;
}
//with this u know , that the first element is going to get 0, so just forcibly assign it to a value “9”.
Hope it helps

TRgis is mY ANS But I am getting problem at one test case on codeForces-
#include<bits/stdc++.h>

using namespace std;

int main(){

int x,rem,count=1,ans=0;

cin>>x;

int digi;

while(x>0){

    rem= x%10;

    if(rem > 9-rem){

        int kk=9-rem;// 2=9-7

        rem=rem-kk;  //5=7-2

        x=x-rem;    //122=127-5

    }

    digi=x%10;

    x=x/10;

    ans=(ans*10)+digi;

}      



int ans2 =0;

while (ans>0){

    rem=ans%10;

    ans=ans/10;

    if(rem==0){

        continue;

    }

    ans2 = (ans2*10)+rem;

}

cout<<ans2;

return 0;

}

Hey @elon_patil I have tested you code on several test cases where the digit starts from 9, your code simply changes 9 to 0 even if it is the first digit. The problem clearly mentions that The decimal representation of the final number shouldn’t start with a zero., but your code doesn’t cover that case, which is causing it to produce incorrect answers.