/* @tier easy @module mm @transform master-util */ /* * mm_cu_0003.c - 마스터 공통 유틸리티 (plain C) [tier=easy] */ #include "mm_cu_0003.h" #include /* 일할 정산: rate_bp 를 경과일(1..10000) 비율로 안분한다 */ long mm_cu_0003_fee(long amount, int rate_bp) { long days, prorated; if (amount <= 0 || rate_bp < 0) return 0; days = (long)rate_bp; if (days > 10000L) days = 10000L; prorated = (amount * days) / 10000L; return prorated; } /* 반올림(절대값 0.5 기준 올림, 부호 보존)으로 unit 정규화 */ long mm_cu_0003_round_unit(long amount, long unit) { long a, q, r, res; int neg; if (unit <= 0) return amount; neg = amount < 0; a = neg ? -amount : amount; q = a / unit; r = a - q * unit; if (r * 2 >= unit) q += 1; res = q * unit; return neg ? -res : res; } /* 디지털 루트(반복 자릿수합)로 분류 */ int mm_cu_0003_classify(long amount) { long v = amount < 0 ? -amount : amount; int root; if (v == 0) return 0; root = (int)(1 + (v - 1) % 9); if (root <= 3) return 0; if (root <= 6) return 1; return 2; }