#include <stdio.h>
#define SIBEOK 1000000000
#define BAEKMAN 1000000
#define CHEON 1000
#define ILL 1
int abs_int(int *n)
{/* n is minus then return 1, not then return 0 */
int sign;
sign = ((*n < 0)? 1 : 0);
*n = ((*n < 0)? -*n : *n);
return sign;
}
int check_width(int num, int width)
{/* too narrow return 1 not 0, no count null size */
int sign, i;
// int null_char = 1;
sign = abs_int(&num);
for (i = 1; num > 1; num /= 10, i++);
i += ((i-1) / 3) + sign;
// i += null_char;
return (width < i)? 1 : 0;
}
int int2comma(char *str, int num, int width)
{/* on success return 0 , not return -1 */
int sign, i;
char num_str[15] = "\0";
char *ptr = num_str;
if (check_width(num, width)) {
sprintf(str, "narrow");
return -1;
}
sign = abs_int(&num);
sprintf(num_str, "%02d,", (num - (num - ( num / SIBEOK) * SIBEOK )) / SIBEOK);
sprintf(num_str+3, "%03d,", (num - num / SIBEOK * SIBEOK) / BAEKMAN);
sprintf(num_str+7, "%03d,", (num - num / BAEKMAN * BAEKMAN) / CHEON);
sprintf(num_str+11, "%03d", (num - num / CHEON * CHEON) / ILL);
for (;*ptr == '0' || *ptr == ','; ptr++) *ptr = ' ';
if (sign == 1) *(--ptr) = '-';
ptr = num_str + 14 - width;
for (i = 0; i < width; i++, ptr++) str[i] = *ptr;
return 0;
}
main()
{
char str[15] = "\0";
int num, width = sizeof(str) - 1;
width = 14;
printf("enter num : ");
scanf("%d", &num);
int2comma(str, num, width);
printf("result = %s\n", str);
}