bool Nine::isPalindrome(int x) {
//std::string x_str = std::to_string(x);
//int x_len = x_str.length();
//for(int i=0; i< x_len/2; i++)
//{
// if (x_str[i] != x_str[x_len - i -1])
// {
// return false;
// }
//}
//return true;
if (x < 0 || (x != 0 && x % 10 == 0)) return false;
int x_backward = 0;
while (x > x_backward)
{
x_backward = x_backward * 10 + x % 10;
x /= 10;
}
return x == x_backward || x == x_backward / 10;
}
헤더 중복 방지
#ifndef NINE_H
#define NINE_H
// 여기에 실제 클래스나 함수 선언
#endif
이거랑 #pragma once 이거랑 같은 효과.
헤더 안에 이미 있던 헤더 또 포함돼있으면 오류 발생하는거 방지.
Visual Studio 들여쓰기 조절
들여쓰기 증가 Tab
들여쓰기 감소 Shift + Tab
boolalpha
cout << true << endl; // 기본 출력: 1
cout << boolalpha << true; // 출력: true
static은 선언부에만 붙이고, 정의부에는 붙이지 않는다.
2h 40m
정규화같은 거 할 때 부동소수점으로 표현되니까 수치 오차 발생한다.
작은 상수 (Epsilon) 정의해놓고 오차가 그것보다 작은지로 판단.
아니면 XMVector3NearEqual()이라는 함수도 있다.
소행렬 : 행이랑 열 제거한 행렬
여인수행렬 : 각 성분 여인수 계산해서 같은 위치에 배치한 행렬
딸림행렬 : 여인수 행렬의 전치 행렬. 행렬식으로 나누면 원본 행렬의 역행렬 나옴.
행렬식 : 그 행렬이 공간을 얼마나 늘리고 뒤집는지 나타내는 값
XMMATRIX : 4x4 행렬 표현
XMFLOAT4X4 : 행렬 저장할 때 사용
함수 매개변수는 XMVECTOR랑 비슷한데, XMMATRIX는 매개변수 하나가 XMVECTOR 매개변수 네 개에 해당.
호출 규약 : 함수 호출할 때 인자를 레지스터, 스택 어디에 저장할지, 호출자, 피호출자 누가 정리할지, 반환값 어디에 둘지 정의하는 규칙
XM_CALLCONV 호출규약을 지정하는 이유 : SIMD 벡터를 레지스터로 직접 전달하고, XMVECTOR의 16바이트 정렬도 하기 위해