본문 바로가기

C C++/C C++ 유용한 알고리즘 기법16

[C/C++] 정수 자릿수의 합 구하기 알고리즘 문제를 풀다 보면 정수 각 자릿수의 합을 구하라는 문제가 있음. 주로 나는 입력된 정수값을 문자열 배열에 각 자릿수를 넣고, 그 자릿수를 각각 정수화해서 더했는 데, 이보다 쉬운 방법을 찾게 됨. 정수 자릿수의 합 구하기 #include int main() { int a=12345; int sum=0; while (a>0){ sum+=a%10; a=a/10; } printf("%d", sum); return 0; } 1) a를 10으로 나눈 나머지는 1의 자릿수이다. 그 값을 정수 sum 변수에 더한다. 2) a를 10으로 나눈 후 다시 반복한다. 이는 a를 10으로 나누면 0이 나올 때까지 반복한다. 그러면 모든 자릿수를 더한 값을 구할 수 있다. 2022. 7. 17.
[C/C++] 거듭제곱 함수 만들기 거듭제곱 함수 만들기 C/C++ 거듭제곱 함수 만드는 방법에 대해 알아 볼 것임. 우선 C/C++에서는 pow라는 함수를 통해 거듭 제곱을 사용할 수 있는 함수를 제공하고 있음. 그런데 왜 만들어서 쓰냐고? 그건 pow 함수 반환형이 float, double, long double이고, 인자도 각각 float, double, long double이어야 하기 때문임. 물론 형변환해서 int 정수형으로 쓸 수 있을 텐데, 문제 풀 때 형변환하면서 풀기는 찝찝해서 만들어 쓰는 것임. 나중에 좀 적응하면 pow를 쓸 지도. 제일 간단한 방법은 아래 방법인 듯. #include int square(int a, int b) { int res=1; for (int i=0; i 2022. 7. 16.
[C/C++] 정수 자릿수 세기 정수 자릿수 세는 방법을 알아보도록 하겠음. C/C++에서 딱히 함수로 자릿수를 세는 함수는 없는 것 같고, 기본 for문이나 while문을 통해 함수로 구현해야 함. 여러 방법이 있지만 아래 방법이 제일 간단한 것 같음. 정수 자릿수 세기 #include int main() { int num; int count = 0; scanf("%d", &num); while(num>0) { num = num/10; count++; } printf("%d", count); return 0; } - num으로 10씩 나눠서 다시 덮어 씀. 자릿수 낮추는 것임. - count (자릿수 세는 변수)가 1씩 올라감. - 마지막 자릿수에서 10으로 나누면 num이 0이 되는 것을 이용하는 것임. 예를 들어, 3/10은 0이.. 2022. 7. 16.
[C/C++] 소문자-대문자 변환, 대문자-소문자 변환 알고리즘 문제 시 특히 소문자를 대문자로 변경 또는 대문자를 소문자로 변경하는 문제가 나오게 됩니다. 이 때 어떤 식으로 변경하면 손쉽게 변경할 수 있는 지 알아보겠습니다. 크게 3가지입니다. 단순 덧셈뺄셈연산, 비트 연산자 사용, 마지막으로 toupper() 함수와 tolower() 함수 사용입니다. 덧셈뺄셈 연산으로 소문자 대문자 변환하기 소문자가 대문자보다 32 큽니다. 둘 다 ASCII 코드입니다. 소문자 a와 z는 정수로 각각 97과 122를 가지고 있습니다. 대문자 A와 Z는 정수로 각각 65과 97을 가지고 있습니다. 적절히 32를 빼거나 더해줌으로써 소문자 대문자 변환을 할 수 있습니다. 아래는 입력된 "HeLLo"를 모두 소문자로 변경하는 코드입니다. 대문자 범위는 65~90이며, 소문자.. 2022. 7. 10.