반응형
백준 10757번 큰 수 A+B 풀이 코드
C | C++ | Java | Python
풀이
C로는 문제에서 주는 긴 수를 바로 더하기 어렵습니다. 문제 난이도 책정이 Python이나 Java기준으로 된 것 같습니다.
일단 큰 배열을 선언하여 숫자를 문자열로 받고 뒷자리부터 하나씩 더합니다. 더할 때 올림이 발생하면 높은 자릿수에 1을 더해줍니다. 더하려는 두 수 중 한쪽이 더 길다면 덧셈 후 나머지 자리는 긴 숫자를 그대로 넣어줍니다. 맨 끝 자리의 올림수 여부를 꼭 확인해 주세요. 올림 처리는 반복되므로 up() 함수를 따로 작성했습니다.
큰 배열을 선언하여 숫자를 문자열로 받고 뒷자리부터 하나씩 더합니다. 더할 때 올림이 발생하면 높은 자릿수에 1을 더해줍니다. 더하려는 두 수 중 한쪽이 더 길다면 덧셈 후 나머지 자리는 긴 숫자를 그대로 넣어줍니다. 맨 끝 자리의 올림수 여부를 꼭 확인해 주세요. 올림 처리는 반복되므로 up() 함수를 따로 작성했습니다.
Java는 긴 수, BigInteger를 지원합니다. 이를 사용해 덧셈을 출력합니다.
Python은 긴 수를 더하는 데 별다른 처리가 필요 없습니다. 입력을 받아 그대로 덧셈을 출력합니다.
코드
#include <stdio.h>
#include <string.h>
void up(int *rlt, int idx){
if(rlt[idx] > 9){
rlt[idx-1] += rlt[idx]/10;
rlt[idx] = rlt[idx]%10;
}
}
int main(){
char a[10001]={0}, b[10001]={0};
scanf("%s %s", a, b);
int n = strlen(a), m = strlen(b), temp, i, result[10002]={0,}, sml, big;
if(m > n){ sml = n; big = m;}
else{ sml = m; big = n; }
for(i = 0 ; i < sml; i++){
temp = (a[n-1-i]-'0') + (b[m-1-i]-'0'); //문자에서 '0'을 빼면 숫자와 동일
result[big+1-i] += temp;
up(result, big+1-i);
}
temp = i;
for(i = temp; i < big; i++){
if(big == n){
result[big+1-i] += a[big-1-i]-'0';
up(result, big+1-i);
}
else{
result[big+1-i] += b[big-1-i]-'0';
up(result, big+1-i);
}
}
int flag = 0;
for(i = 0 ; i < big+2; i++){
if (flag == 0) {
if (result[i] != 0)
flag = 1;
else if (i == big+1)
printf("0");
}
if (flag != 0)
printf("%d", result[i]);
}
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
void up(int *rlt, int idx){
if(rlt[idx] > 9){
rlt[idx-1] += rlt[idx]/10;
rlt[idx] = rlt[idx]%10;
}
}
int main(){
char a[10001]={0}, b[10001]={0};
cin>>a>>b;
int n = strlen(a), m = strlen(b), temp, i, result[10002]={0,}, sml, big;
if(m > n){ sml = n; big = m;}
else{ sml = m; big = n; }
for(i = 0 ; i < sml; i++){
temp = (a[n-1-i]-'0') + (b[m-1-i]-'0'); //문자에서 '0'을 빼면 숫자와 동일
result[big+1-i] += temp;
up(result, big+1-i);
}
temp = i;
for(i = temp; i < big; i++){
if(big == n){
result[big+1-i] += a[big-1-i]-'0';
up(result, big+1-i);
}
else{
result[big+1-i] += b[big-1-i]-'0';
up(result, big+1-i);
}
}
int flag = 0;
for(i = 0 ; i < big+2; i++){
if (flag == 0) {
if (result[i] != 0)
flag = 1;
else if (i == big+1)
cout<<"0";
}
if (flag != 0)
cout<<result[i];
}
return 0;
}
import java.util.Scanner;
import java.math.BigInteger;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
BigInteger a = sc.nextBigInteger();
BigInteger b = sc.nextBigInteger();
System.out.println(a.add(b));
}
}
a,b = map(int,input().split())
print(a+b)
문제 출처
반응형
'Coding > BAEKJOON' 카테고리의 다른 글
[백준] 5338번 마이크로소프트 로고 풀이 코드 (C/C++/Java 자바/Python 파이썬) (0) | 2021.10.01 |
---|---|
[백준] 3046번 R2 풀이 코드 (C/C++/Java 자바/Python 파이썬) (0) | 2021.09.29 |
[백준] 7287번 등록 풀이 코드 (C/C++/Java 자바/Python 파이썬) (0) | 2021.09.27 |
[백준] 2475번 검증수 풀이 코드 (C/C++/Java 자바/Python 파이썬) (0) | 2021.09.26 |
[백준] 22193번 Multiply 풀이 코드 (C/C++/Java 자바/Python 파이썬) (9) | 2021.09.08 |