#include<stdio.h>
#include<string.h>

int YenCov(int, int, char *, int);

int main(void) {
  int kingaku;
  int mode;
  int datsize;
  int rtn;
  char kindat[15];

  printf("金額入力==>");
  scanf("%d", &kingaku);

  printf("モード(1 or 2)==>");
  scanf("%d", &mode);

  printf("データサイズ==>");
  scanf("%d", &datsize);

  rtn = YenCov(kingaku, mode, kindat, datsize);

  if (rtn == -1) {
    printf("モードエラー\n");
  } else if (rtn == -2) {
    printf("領域不足エラー\n");
  } else {
    printf("編集金額 = %s\n", kindat);
  }

  return 0;
}

int YenCov(int kin, int md, char *bp, int size) {
  char buf1[15]; /* 対象データ格納用 */
  char buf2[15]; /* \マーク編集結果を格納 */
  int len; /* 対象データ文字数格納用 */
  int cmcnt; /* 挿入カンマ数カウンタ */
  int cnt; /* コピー文字数カウンタ */
  int i, j;

  cnt = 0;

  if (md != 1 && md != 2) {
    return -1;
  }

  sprintf(buf1, "\\%d", kin); /* 金額を文字列としてbuf1に格納 */

  len = strlen(buf1);
  if (md == 1) {
    cmcnt = 0;
  } else {
    cmcnt = (len - 2) / 3;
  }

  if (len + cmcnt + 1 > size) {
    return -2;
  }

  if (md == 1) {
    strcpy(buf2, buf1);
  } else {
    buf2[len + cmcnt] = '\0';
    for (i = len - 1; i >= 0; i--) {
      j = i + cmcnt;
      if (cnt == 3 && cmcnt != 0) {
        /* ①番   カンマ代入 */
        buf2[j] = ',';
        cnt = 0;
        cmcnt--;
        /* ②番  添え字の更新 */
        j--;
      }
      /* ③番  数値文字の結果の代入 */
      buf2[j] = buf1[i];
      cnt++;
    }
  }
  strcpy(bp, buf2);
  return 0;
}