Formatted Numbers


This is a companion discussion topic for the original entry at https://toph.co/p/formatted-numbers
#include<stdio.h>
int  main(){
     int k1,k2,k3;
    int n;

   scanf("%d",&n);
   if(n<20000000){
   k3=n%1000;
    n= n/1000;
     k2=n%1000;
      n=n/1000;
     k1=n%1000000;
   printf("%d,%d,%d",k1,k2,k3);
   }
   return 0;




}

why this judged as wrong ans

1 Like

@KAS.shim1998 Change this to n < 200000000. Plus, you can drop the if if you want.

Here is my code. Why am I getting wrong answer in test case 4?
#include <stdio.h>

int main(void)
{
int n, t0, t1, t2;
int ok = 0;

scanf("%d", &n);

if (n >= 1000000){
	t0 = n%1000;
	n /= 1000;
	t1 = n%1000;
	t2 = n/1000;
	ok=1;
}
else if (n >= 10000){
	t0 = n%100;
	n /= 100;
	t1 = n%100;
	t2 = n/100;
	ok=1;
}
else if(n >= 100){
	t0 = n%10;
	n /= 10;
	t1 = n%10;
	t2 = n/100;
	ok=1;
}
if (ok) printf("%d,%d,%d\n", t2,t1,t0);
else {
	if (n>=10){
		t0 = n%10;
		t1 = n/10;
		printf("%d,%d,%d\n",0,t1,t2);
	}
	else {
		printf("%d,%d,%d\n",0,0,n);
	}
}

return 0;

}

@md_jakariya Try some inputs that have trailing zeroes. For example 1000 should be printed as 1,000

Thank you. But it would be better (I think) if A (100<=A<2000000000) was written in input description.

1 Like

@md_jakariya That is a good point. We have updated the statement and added an additional test case.

My program is keep returning wrong answer in the last test(6). What should I do? Where is my problem?
Here is My CODE(Java JDK 11.22)

import java.util.Scanner;
public class toph {
public static void main(String[] args) {

    Scanner s = new Scanner(System.in);
    int num = s.nextInt();
    String str = "";
    int i = 1;
    if(num ==0 || num == 200000000){
        System.out.println(num);
    }
    if (0 <= num && num < 200000000) {
        while (num != 0) {
            str = num % 10 + "" + str;
            num = num / 10;


            if (i % 3 == 0 && num != 0) {

                str = "," + str;
            }

            i++;
        }
        System.out.println(str);

    }

}

}

Hey guys, every time I submit this, it shows wrong answer in case 6. if anyone gives me the solution I will be pleased…C

#include <stdio.h>

int main()
{
    int n, i1, i2, i3;

    scanf("%d", &n);

    if (n % 1000 == 0) {
        i3 = 0;
    }
    else {
        i3 = n % 1000;
    }
    n = n / 1000;

    if (n % 1000 == 0) {
        i2 = 0;
    }
    else {
        i2 = n % 1000;
    }
    n = n / 1000;

    if (n % 1000 == 0) {
        i1 = 0;
    }
    else {
        i1 = n % 1000;
    }

    if (i1 == 0) {
        printf("000,");
    }
    else {
        printf("%d,", i1);
    }

    if (i2 == 0) {
        printf("000,");
    }
    else {
        printf("%d,", i2);
    }

    if (i3 == 0) {
        printf("000");
    }
    else {
        printf("%d", i3);
    }

    return 0;
}

@Farhan2500 Try your code with the edge cases. See the limits of A.

#include <string>
#include <iostream>

int main()
{
	std::string strn;
	std::cin >> strn;
	char ch = '0';
	int x = 0, count = 0, dgcount = 0;
	
	for(char &c : strn)
	{
		if(std::isdigit(c))
			++dgcount;
	}
	
	for(auto &c : strn)
	{
		if((strn.size() > 3) && (strn[0] != ch) && std::isdigit(c) && (strn.size() == dgcount))
		{
			if(x == 0)
			{
				std::cout << c << ",";
			}
			if(count == 3)
			{
				std::cout << ",";
				count = 0;
			}
			if(x == 2)
			{
				std::cout << c;
				++count;
			}
			x = 2;
		}
		/*else
			std::cout << c;*/
	}
}

Why am I getting wrong answer in the 2nd case?

First of all, this part of the condition seems odd:

(strn[0] != ch)

Since this is how you initialized ch:

char ch = '0';

This condition is comparing strn[0] for the digit 0, not the null character.

Next, you are going from left to right to add comma. Although that is technically possible, I don’t see the math in your code required to do that. The use of x and count seems a bit convoluted.

Can you explain what your thought process was behind this code? May be I can then help you simplify that and as a result you will be able to write a simpler solution for this problem.

Sorry for the late reply.
First of all I wrote that char ch = ‘0’ and I was not expecting a null character(/0).I know my logic is a little unclear to the readers. But what I meant is, if the first character in the input is 0 then don’t add a comma after that(since I misleadingly thaught the commas go from left to right).I added the x as 0 and changed to 2 because I wanted it to ignore that if() fafte adding the first comma

And what the count does is, after 3 character outputs, it prints a comma and resets the count to 0

If you use this input with your code:

123456789

The output you get is

1,234,567,89

The output that is expected is

123,456,789

So you need to group the numbers from the right side. Each group will have three digits. The left most group can have less than 3 digits.

 12,345,678
  1,234,567
    123,456
     12,345
      1,234
        123
         12
          1
3 Likes

got this. Thanks . Answer is accepted now

1 Like
[Redacted]

My problem is solved

WoW! That’s great.
I have submitted it and it was accepted.
Can you give the source where you had found it?

#include <stdio.h>

int main()
{
	int a,b,c,d;
	scanf("%d",&a);
	b=a%1000;
	c=a%1000000;
	d=d%1000000000;
	printf("%d,%d,%d",&d,&c,&b);
	return 0;
}

problem ???

Your code gives wrong answer for input value 1000. Read the problem statement carefully.

1 Like