#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
unsigned long long s;
scanf("%llu", &s);
unsigned long long left = 1;
unsigned long long right = s;
unsigned long long n= 0;
while (left <= right) {
unsigned long long mid = (left + right) / 2;
unsigned long long sum = mid *(mid + 1) / 2;
if (sum <= s) {
n = mid;
left = mid + 1;
}
else {
right = mid - 1;
}
}
printf("%llu\n", n);
return 0;
}
1.수를 입력받습니다.
2.받을 수 있는 숫자가 매우 커질 수 있기에 unsigned long long을 사용해줍니다
3.while문을 이용해서 n을 찾아줍니다.
3-1.이때 이진탐색을 이용해서 숫자를 찾아줍니다.
4.출력합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b) {
int A= *(int*)a;
int B = *(int*)b;
if (A > B) return 1;
else if (A < B) return -1;
else return 0;
}
int main(void) {
unsigned int N;
scanf("%u", &N);
int* arr = (int*)malloc(N * sizeof(int));
for (unsigned int i = 0; i < N; i++) {
scanf("%d", &arr[i]);
}
qsort(arr, N, sizeof(int), compare);
for (unsigned int i = 0; i < N; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
1.받아야하는 숫자가 커질 수 있으므로 unsigned int를 사용한다.
2. qsort함수에 사용될 compare함수를 미리 만들어둔다.
2-1,각 숫자가 서로 얼마나 차이나는지에 따라 1, -1, 0을 반환한다.
3.숫자들을 입력받는다.
4.미리 만들어둔 compare함수로 내장함수인 qsort함수를 이용해 비교한다.
5.출력한다.