티스토리 뷰

알고리즘/홍정모 알고리즘

초등학교 덧셈

박완희버서커 2025. 8. 27. 18:28
반응형

백준 문제 A+B를 기준으로 실험하였다.

https://www.acmicpc.net/problem/1000

우선 이건 성공했다. 

 

정모형이 홍랩에 있는 코드는 올리지말라고 해서 힌트 안 보고 나혼자 한 코드를 우선 올리겠다.

 

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

void Substraction(char*A,char*B)
{
    
}

void Addiction(char*A,char*B)
{
    char Sum_arr[10002];
    int A_start=(int)strlen(A)-1;
    int B_start=(int)strlen(B)-1;
    int start=0,temp=0,cal=0;
    int end=max(A_start,B_start);
    
    
    while((A_start>=0 || B_start>=0) && start<=end)
    {
        
        if(B_start<0)
        {
            cal=(A[A_start]-'0'+temp);
            A_start--;
        }
        else if(A_start<0)
        {
            cal=(B[B_start]-'0'+temp);
            B_start--;
        }
        else
        {
            cal=(A[A_start]-'0')+(B[B_start]-'0')+temp;
            B_start--;
            A_start--;
        }
        if(cal>=10)
            temp=1;
        else
            temp=0;
        
        Sum_arr[start]=cal%10+'0';
        start++;
        
        
    }
    if(temp==1)
    {
        Sum_arr[start]=temp+'0';
        start++;
    }
    

    for(int i=start-1;i>=0;i--)
    {
        cout<<Sum_arr[i];
    }
    cout<<endl;
}

int main(void)
{
    char A[10001];
    char B[10001];
    
    cin>>A>>B;
    Addiction(A, B);
    return 0;
}

 

 

우선 나는 세 개의 포인터를 만들었다. 

 

A문자열

1 2 3 4 \0
      A_start  

 

B문자열

2 3 4 \0  
    B_start    

 

  • 숫자를 더하려면
  • 맨 끝에서부터 더하기 때문에 각 마지막에서 더할 때마다
  • 각각 A_start,B_start를 --한다. 그러면 한칸씩 이동하면서 가리키는 자릿수가 바뀌게 된다.
  • 이 값을 sum_arr에 더해간다. 

Sum_arr

4+4        
start        
  • 값을 뒤에서부터 채우기란 매우 힘들기에 앞에서부터 값을 채우고 출력을 뒤에서부터 하기로 한다.
  • 값을 채우면 start를 전진하여 앞에 값을 채운다.

올림수가 있는 경우

9+5=14        
start        
  • 이 경우에는 %10을 하여 4는 현재 start가 가리키는 자리에 저장한다.
  • 그리고 무조건 올림수는 1이기 때문에 start를 전진하여 1을 앞에 저장한다.
4 1      
  start      

 

 

만약 모든 값이 다 찼다고 하고 예를 들어 그 값이 3214라면,

4 1 2 3  
        start

 

이 값을 거꾸로 출력한다.

    for(int i=start-1;i>=0;i--)
    {
        cout<<Sum_arr[i];
    }
    cout<<endl;

 

그러면 우선 덧셈을 완성이다.

 

https://www.acmicpc.net/problem/15740

이 문제를 사실 풀고 싶었는데, 이건 뺄셈도 구현해야 한다.

뺼셈도 구현해서 이 문제를 풀어봐야겠다.

반응형

'알고리즘 > 홍정모 알고리즘' 카테고리의 다른 글

초등학교 뺄셈  (2) 2025.08.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/11   »
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
글 보관함
반응형