/* @tier easy @module py @transform payment-util */ /* * py_cu_0005.c - 지급 공통 유틸리티 (plain C) [tier=easy] */ #include "py_cu_0005.h" #include /* 통화 스케일 환산 수수료: minor unit 로 확장 후 요율 적용, major 복귀 */ long py_cu_0005_fee(long amount, int rate_bp) { long scaled, fee; if (amount <= 0 || rate_bp < 0) return 0; scaled = amount * 100L; fee = (scaled * (long)rate_bp) / 10000L; fee = fee / 100L; return fee; } /* 내림(음의 무한대 방향)으로 unit 정규화 */ long py_cu_0005_round_unit(long amount, long unit) { long q, r; if (unit <= 0) return amount; q = amount / unit; r = amount - q * unit; if (r < 0) q -= 1; return q * unit; } /* 임계값 테이블 이분 탐색으로 백분위 버킷 분류 */ int py_cu_0005_classify(long amount) { static const long th[] = { 5000L, 50000L, 500000L, 5000000L, 50000000L }; int lo = 0, hi = 5, mid; while (lo < hi) { mid = (lo + hi) / 2; if (amount < th[mid]) hi = mid; else lo = mid + 1; } return lo; }