10757번: 큰 수 A+B


#include <iostream>
#include <string>
using namespace std;
int main()
{
string inputA;
string inputB;
cin >> inputA >> inputB;
int inputALength = inputA.size();
int inputBLength = inputB.size();
int forloopSize = 0;
string result;
if(inputALength > inputBLength) forloopSize = inputALength;
else forloopSize = inputBLength;
int ten = 0;
for(int i =0; i < forloopSize; i++)
{
string a = "0";
string b = "0";
if(inputALength -1-i >= 0 )
{
a = inputA[inputALength - 1 - i];
}
if(inputBLength -1-i >= 0)
{
b = inputB[inputBLength-1-i];
}
int intA =0;
int intB = 0;
intA = stoi(a);
intB = stoi(b);
int intC = intA+intB+ten;
int intresult = intC % 10;
ten = intC/10;
result = to_string(intresult) + result;
}
if(ten ==1)
{
result = '1' + result;
}
cout << result;
}
메모리 (KB) | 시간 (ms) | 코드 길이 (B) |
2024 | 4 | 1110 |
🤔 다시 풀어보기
우선 이 문제는 다른 분이 거의 풀어주시다시피 한 문제이기 때문에 코드에 대한 완전한 이해, 기존 코드를 보지 않고도 다시 풀어내고 싶다. 그래서 오늘 안에 페이지를 갱신할 예정이다.
또, 지금 코드는 구현을 우선하는 코드이기 때문에 더 알아보기 쉽고 직관적인 코드로 다시 짜볼 예정이다.
추가로 이 문제에도 C 입출력과의 연결을 끊는 코드를 넣었을 때 시간에 차이가 있는지 확인도 해보고 싶다.
➕ 재풀이
#include <iostream>
#include <string>
using namespace std;
int main()
{
string inputA;
string inputB;
cin >> inputA >> inputB;
int inputASize = inputA.size();
int inputBSize = inputB.size();
string result;
int resultLength = (inputASize > inputBSize) ? inputASize : inputBSize;
int checkOverTen = 0;
for (int i = 0; i < resultLength; i++)
{
string a;
string b;
int sum = 0;
if (inputASize - 1 - i >= 0) a = inputA[inputASize - 1 - i];
else a = "0" + a;
if (inputBSize - 1 - i >= 0) b = inputB[inputBSize - 1 - i];
else b = "0" + b;
sum = stoi(a) + stoi(b) + checkOverTen;
int extra = sum % 10;
checkOverTen = sum / 10;
result = to_string(extra) + result;
}
if (checkOverTen == 1) result = '1' + result;
cout << result;
}
다시 풀었지만 for문에서 계속 형변환 하는 게 신경 쓰인다. reverse 함수를 만들어 입력 받은 두 값을 뒤집은 후 계산하는 방법도 있던데 다음에는 그렇게 풀어봐야겠다.
덧붙여
if (inputASize - 1 - i >= 0) a = inputA[inputASize - 1 - i];
else a = "0" + a;
if (inputBSize - 1 - i >= 0) b = inputB[inputBSize - 1 - i];
else b = "0" + b;

이렇게 적은 이유는, inputA의 길이가 inputB보다 길면 B에서는 A에 대응할 값이 없기 때문에 오류가 난다. 그래서 대응할 값을 만들어주기 위해 0을 넣어주었다.
Uploaded by N2T