반응형
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
예제 입력 1
9223372036854775807 9223372036854775808
예제 출력 1
18446744073709551615
내 풀이)
#include <iostream>
using namespace std;
//10의 10만승은 10001임 10^2 => 100이므로 3자리수가됨
char A[10001] = { 0 };
char B[10001] = { 0 };
char C[10001] = { 0 };
char a_alpha[10001] = { 0 };
char b_alpha[10001] = { 0 };
int main()
{
/*
문제
1. 두 정수의 합을 출력
입력
1. 두 정수를 배열형태로 입력받는다.
처리
1. 입력 받은 배열을 올림하는 방식으로 더해준다.
출력
*/
cin >> A;
cin >> B;
int array_a = 0;
int array_b = 0;
int array_c = 0;
for (int i = 0; A[i] != '\0'; i++)
{
array_a++;
}
int count = 0;
for (int i = array_a -1 ; i >= 0; i--)
{
a_alpha[count] = A[i];
count++;
}
for (int i = 0; B[i] != '\0'; i++)
{
array_b++;
}
int count2 = 0;
for (int i = array_b - 1; i >= 0; i--)
{
b_alpha[count2] = B[i];
count2++;
}
//연산하는 부분
if (array_a >= array_b) {
int upCount = 0;
for (int i = 0; i < array_a; i++)
{
int num = a_alpha[i] - '0';
int num2 = 0;
if (b_alpha[i] == '\0')
{
num2 = b_alpha[i];
}
else
{
num2 = b_alpha[i] - '0';
}
C[i] = ((num + num2 + upCount) % 10) + '0';
upCount = (num + num2 + upCount) / 10;
//array_a이 끝이고 올림이 발생했다면 하나 더 넣어주기
if (array_a - 1 == i && upCount == 1)
{
C[array_a] = upCount + '0';
}
}
}
else {
int upCount = 0;
for (int i = 0; i < array_b; i++)
{
int num = b_alpha[i] - '0';
int num2 = 0;
if (a_alpha[i] == '\0')
{
num2 = a_alpha[i];
}
else
{
num2 = a_alpha[i] - '0';
}
C[i] = ((num + num2 + upCount) % 10) + '0';
upCount = (num + num2 + upCount) / 10;
//array_a이 끝이고 올림이 발생했다면 하나 더 넣어주기
if (array_b - 1 == i && upCount == 1)
{
C[array_b] = upCount + '0';
}
}
}
for (int i = 0; C[i] != '\0'; i++)
{
array_c++;
}
for (int i = array_c - 1; i >= 0; i--)
{
cout << C[i];
}
return 0;
}
문제점 : 소스의 간략화를 못했다.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
//cin 는 char 배열, double 형, int형을 담을수 있다.
string s1, s2, temp; //배열의 용량을 입력하지 않아도됨 => 동적 메모리
int num1[10001];
int num2[10001];
int main()
{
/*
두 정수 A와 B를 입력받은 다음 A+B를 출력하는 프로그램을 작성하시오.
*/
cin >> s1 >> s2;
int sum;
vector <int> vec;
//더 긴수를 s1으로 받기
if (s1.size() < s2.size())
{
temp = s1;
s1 = s2;
s2 = temp;
}
//num1, num2 배열 만드는 과정
//배열의 맨 앞자리는 올림으로 인한 1이 발생할수 있기 때문에 비워준다.
for (int i = 0; i < s1.size(); i++)
{
num1[i + 1] = s1[i] - '0';
}
for (int i = 0; i < s2.size(); i++)
{
num2[i + 1 + (s1.size() - s2.size())] = s2[i] - '0';
//두 배열의 길이의 차를 더해준이유는 맨 끝자리 부터 반복문으로 돌려 배열에 저장해주기 위해
//수의 자리를 맞춰 준다.
}
for (int i = s1.size(); i > 0; i--)
{
sum = num1[i] + num2[i];
if (sum > 10)
{
num1[i - 1]++;//윗자리에 +1 해준다.
sum -= 10;// 10이상이면 10을 빼줌으로써 나머지값을 구할수 있다.
}
vec.push_back(sum);
}
//윗자리 + 1로 맨 윗자리 수가 1로 올라갔으면 1출력되게 한다.
if (num1[0] != 0)
{
cout << 1;
}
//벡터값을 거꾸로 출력해준다.
for (int i = vec.size() - 1; i >= 0; i--)
{
cout << vec[i];
}
return 0;
}
반응형
'알고리즘' 카테고리의 다른 글
[백준 알고리즘 c++] 문제 15. 소수 찾기2 2581 (0) | 2022.09.02 |
---|---|
[백준 알고리즘 c++] 문제 14. 소수 찾기 1978 (0) | 2022.08.31 |
[백준 알고리즘 c++] 문제 12. 최소단위로 봉지 나누기 2839 (0) | 2022.08.31 |
[백준 알고리즘 c++] 문제 11. 해당 호수별 인원 파악 2775 (0) | 2022.08.31 |
[백준 알고리즘 c++] 문제 10. 벡터를 이용한 데이터 다루기 백준 1920 (0) | 2022.08.31 |