- ìˆ˜ì •. 한가지 오류를 바로 ìž¡ìŒ. "/10" 으로 나눔 ì—°ì‚°. ì¿¡... ì¦ê±°ìš´ 공통 수학 시간ì´êµ°. p를 1834567891242341235423542542451234145678551475585744로 ê°€ì • k = log(n root string:p) // p를 string으로 ë°›ìŒ = 1/n * log(string:p) // nì„ ë°–ìœ¼ë¡œ 낸다. = 1/n * ( log( 10ì˜ (string:pì˜ ìžë¦¿ìˆ˜)승) + log((x) = string:pì˜ ë§¨ 첫숫ìžì™€ ë‘번째 숫ìžë¥¼ ì¼ì˜ìžë¦¬ë¡œ 한 ê²ƒì„ ë°˜ì˜¬ë¦¼. -> ì˜ˆì œì—서 1.8) ) // ë°˜ì˜¬ë¦¼ì€ ceil, floor 함수로 효율성 있게 구성한다. // 여기서 문ìžë¥¼ 숫ìžë¡œ ë³€ê²½í•˜ê³ log10 함수를 사용한다. // 반올림 하지 ì•Šê³ ë°”ë¡œ log10ì„ ì·¨í•´ë„ ë¨. = 1/n * ( ìžë¦¿ìˆ˜ + log(x) ) = 계산 ë. // ë°˜ì˜¬ë¦¼ì„ í•˜ê³ ì •ìˆ˜ë¡œ ìºìŠ¤íŒ…í•œë‹¤. ì •ìˆ˜í˜•ì´ê¸° ë•Œë¬¸ì— ì´ê²ƒì€ 맞아떨어ì§. ì„¤ë ¹ 실수형ì´ëž˜ë„ 로그로 ì¸í•´ ê·¼ì‚¬ê°’ì— ë§žì•„ 떨어ì§. (반올림 하면ë¨) {{{~cpp // 개략 ì ì¸ ì½”ë”©ìœ¼ë¡œ 컴파ì¼ëŸ¬ê°€ 없어 ì—러를 잡지 못했ìŒ. // 수학 함수는 func(). n, p를 받아들ì´ê³ ì •ìˆ˜ k를 반환함. // 6시 44ë¶„ 코딩 시작 // 6시 57ë¶„ ë. #include <stdio.h> #include <string.h> #include <math.h> int func(char *p, int n){ double ret_buf; int ret; int t = strlen(p)-1; double buf; char p_buf[3]; sscanf(p_buf, "%2c\0", p); // ì•žì˜ ë‘ ìžë¦¬ë§Œ 취한다. buf = log10((double)atof(p_buf)/10); // 첫 ë‘ìžë¦¬ë¥¼ log취한다. ret_buf = (buf+t)/n; if(ret_buf >= (ceil(ret_buf)+floor(ret_buf))/2) // 반올림. 올림+내림/2보다 í´ê±°ë‚˜ ê°™ì„ ê²½ìš° ret_buf = (int)ret_buf + 1; // 올림. ret = (int)ret_buf; // 내림ì¼ê²½ìš° 여기서 ì €ì ˆë¡œ 내린다. return ret; } }}}