예를 들어 코테 문제에 숫자 하나를 입력받아 뒤집은 숫자와 더한 값을 출력하는 문제(즉 12345를 입력했으면 12345+54321=66666를 출력하는 문제가 나왔다고 하면

나같은 떌깜은 이렇게 풀 거임.

long long a; cin>>>a; string b = to_string(a); reverse(b.begin(), b.end()); long long c = stol(b); cout<<a + c;


반면 수학을 잘 아는 참 프로그래머들은

long long a; cin>>a; long long c = 0; do { c *= 10; c += b % 10; b /= 10; } while (b > 0); long long d = a + c;

이렇게 풀 것인데, 나는 두 코드의 실행 시간이 어떤지 궁금해져 비교를 하는 프로그램을 짜봄

#include <iostream> #include <string> #include <ctime> #include <algorithm> #include <chrono> #include <thread> using namespace std; int main(int, char **) { using std::chrono::duration; using std::chrono::duration_cast; using std::chrono::high_resolution_clock; using std::chrono::milliseconds; using namespace chrono; double sum = 0; for (int i = 0; i < 100000; i++) { system_clock::time_point t1 = high_resolution_clock::now();   long long a = 123456789;   string b = to_string(a); reverse(b.begin(), b.end()); long long c = stol(b); long long d = a + c; using namespace std::chrono_literals; system_clock::time_point t2 = high_resolution_clock::now(); duration<double, std::milli> ms_double = t2 - t1; cout<<d<<endl; sum += ms_double.count(); } cout.setf(ios::fixed); cout << sum/100000 << endl; double sum2 = 0; for (int i = 0; i < 100000; i++) { system_clock::time_point t1 = high_resolution_clock::now();   long long a = 123456789; auto b = a; long long c = 0; do { c *= 10; c += b % 10; b /= 10;   } while (b > 0); long long d = a + c; using namespace std::chrono_literals; system_clock::time_point t2 = high_resolution_clock::now(); cout<<d<<endl; duration<double, std::milli> ms_double = t2 - t1; sum2 += ms_double.count(); } cout.setf(ios::fixed); cout << sum2/100000<<endl; cout<<sum/sum2<<endl; }


실행 결과:





(위가 땔감식, 밑이 수학식)

결론:수학식 알고리즘이 2배정도 빠르다.