알고리즘

C++ 큰 수 더하기,빼기, 곱하기

Chars4785 2019. 2. 8. 12:31

덧셈


long long 사이즈를 넘어가는 값을 더하는 문제입니다.


예제 


12131238912943647264921780210

1231232132716391368131963


더하기 


!!!


------------------------------------------------------



#include <iostream>
#include <string.h>


using namespace std;

char first[101];
char second[101];

int result[101];

int main(){

cin.getline(first,100);
cin.getline(second,100);

int lenF = strlen(first);
int lenS = strlen(second);
int big,plus=0,each=0;
char *bigOne;

if(lenF > lenS)
{
big = lenF;
bigOne = first;
}else {
big = lenS;
bigOne = second;
}

//1234
//11
int value;

for(int i=0; i<big; i++)
{
if(lenS-1-i <0 ) value = first[lenF-1-i]-48;
else if(lenF-1-i <0) value = second[lenS-1-i]-48;
else value = first[lenF-1-i] -48 + second[lenS-1-i] -48;
each = (value+plus) % 10 ;
plus = (value+plus) /10;
result[i] = each;
}

if(plus != 0)
{
result[big]= plus;
big++;
}
for(int i = big-1; i>=0;i--)
cout<<result[i];

return 0;

}




어려웠던 점은 


첫번째 


0 + 1 인 경우에 0이라는 char 타입을 구별해주는 것이였다. 

2가지 방법이 있는데


1. 그냥 무시하기

2. 더하는 것을 integer형으로 0을 더해주면 된다. 


두번째


어떻게 길이가 같지 않는 두 char 배열을 맞추는 것인데 

> 그냥 가장 큰 길이를 먼저 찾고 result 를 거꾸로 넣고 다시 거꾸로 빼면 된다. 


약간 무식해 보이는 방법 사용 했다.

아직 공부중이고 더 좋은 방법이 있다면 계속 수정할 계획이다. 



--------------------------------------------------------------


뺄셈


예제 입력

18592918185
2195812983912895799129

예제 출력

-2195812983894302880944


--------------------------------------------------------------


곱하기