Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백트래킹
- aws
- Docker
- 월미도
- Spring
- Spring Boot
- 스프링부트
- 오일러프로젝트
- gcp
- Apache Kafka
- Spring Data JPA
- 백준
- springboot
- 코드업
- 인천여행
- 프로그래밍문제
- VPC
- 스프링 부트
- DFS
- 클라우드
- Elasticsearch
- JPA
- Kafka
- 쿠버네티스
- 스프링
- 로드밸런서
- 자료구조
- 카프카
- 알고리즘
- 클라우드 컴퓨팅
Archives
- Today
- Total
GW LABS
[오일러 프로젝트 16] 2^1000의 자리수 구하기 본문
처음에 이 문제를 접근할 때 long double을 이용해서 해결을 하려고 했지만 숫자가 너무 컸기 때문에 자리수를 모두 구할 수 가 없었다. 자료형의 최대치를 넘어가는 숫자를 연산하려면 어떻게 해야할까? 단순히 동적배열에 연산을 하고 자리수에 해당하는 숫자를 연속적으로 할당하면 해결할 수 있다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
vector<int> a;
a.push_back(2);
int cases = 999;
while (cases--) {
for (int idx = 0; idx < a.size(); idx++) a[idx] *= 2;
for (int idx = 0; idx <= a.size() - 1; idx++) {
if (a[idx] >= 10) {
if (idx == a.size() - 1) {
int tmp = a[idx] / 10;
a.push_back(tmp);
a[idx] %= 10;
}
else {
int tmp = a[idx] / 10;
a[idx+1] += tmp;
a[idx] %= 10;
}
}
}
}
int sum = 0;
for (int num : a) {
sum += num;
}
cout << sum << endl;
return 0;
}
간단하게 해결할 수 있는 문제였는데 long double을 이용해서 해결하려다보니 시간이 너무 많이 소요됐다. 적절한 자료구조를 연상하는 연습이 더 필요한 것 같다.
'Algorithm & DataStructure' 카테고리의 다른 글
[오일러 프로젝트 21] 10000 이하 모든 친화수(우애수)의 합은? (0) | 2020.06.16 |
---|---|
[오일러 프로젝트 17] 1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는? (0) | 2020.06.09 |
[코드업 4434] 좋은 수열 (0) | 2020.05.24 |
[코드업 3540] 0 만들기 게임 (0) | 2020.05.21 |
[코드업 3506] 블럭 채우기 1 (small) (0) | 2020.05.10 |
Comments