int num;
1,234,567,890 혹은 -1,234,567,890 으로 변환합니다.
또한 출력폭을 정할 수 있습니다.
| 1,234,567| 폭을 9로 정했을 때 좌측2칸은 빈칸으로 나옴
소스 파일 :
#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); } | cs |
아래는 필드폭은 주어지지 않고 천단위마다 컴마를 찍어줍니다.
#include <stdio.h> #include <string.h> void main() { char a[100]; int i, n, k, cnt; printf("숫자 입력 : "); gets(a); k = strlen(a); n = k % 3; cnt = 3 - n; for (i = 0; i < k; i++) { printf("%c",a[i]); cnt++; if (cnt % 3 == 0 && i != k-1) printf(","); } printf("\n"); } | cs |
첨부파일첨부된 파일이 1개 있습니다.
다음검색