본문 바로가기

카테고리 없음

4주차_C언어

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void){

	int N;
	scanf("%d", &N);

	for (int j = 0; j < N; j++) {
		for (int k = 0; k < j; k++) {
			printf(" ");
		}
		for (int i=0; i < N-j; i++) {
			printf("*");
		}
		
		printf("\n");
		
	}
	return 0;
}

1.N으로 별의 개수를 입력받는다.

2.for문을 이용하여 별을 반복한다. 하나는 별의 개수가 감소하고 다른 하나는 공백의 수가 증가하므로 이를 고려한다.

3.출력한다.

 

#include <stdio.h>
#include <string.h>

#define MAX_LEN 101

void add(char *a, char *b, char *result) {
    int lenA = strlen(a);
    int lenB = strlen(b);
    int lenResult = lenA > lenB ? lenA : lenB;
    int carry = 0, sum = 0;
    
    result[lenResult] = '\0';

    for (int i = 1; i <= lenResult; i++) {
        int digitA = (i <= lenA) ? a[lenA - i] - '0' : 0;
        int digitB = (i <= lenB) ? b[lenB - i] - '0' : 0;
        sum = digitA + digitB + carry;
        carry = sum / 10;
        result[lenResult - i] = (sum % 10) + '0';
    }
    if (carry) {
        memmove(result + 1, result, lenResult + 1);
        result[0] = carry + '0';
    }
}

void multiply(char *a, char *b, char *result) {
    int lenA = strlen(a);
    int lenB = strlen(b);
    int lenResult = lenA + lenB;
    int* tempResult = (int*)calloc(lenResult, sizeof(int));

    for (int i = lenA - 1; i >= 0; i--) {
        for (int j = lenB - 1; j >= 0; j--) {
            tempResult[i + j + 1] += (a[i] - '0') * (b[j] - '0');
        }
    }

    for (int i = lenResult - 1; i > 0; i--) {
        if (tempResult[i] >= 10) {
            tempResult[i - 1] += tempResult[i] / 10;
            tempResult[i] %= 10;
        }
    }

    int pos = 0;
    for (int i = 0; i < lenResult; i++) {
        if (pos == 0 && tempResult[i] == 0) continue;
        result[pos++] = tempResult[i] + '0';
    }
    if (pos == 0) result[pos++] = '0';
    result[pos] = '\0';
    free(tempResult);
}

int main(void) {
    char a[MAX_LEN], b[MAX_LEN], result[MAX_LEN * 2];
    char operator;
    
    scanf("%s", a);
    while (getchar() != '\n');
    scanf("%c", &operator);
    scanf("%s", b);

    if (operator == '+') {
        add(a, b, result);
    } else if (operator == '*') {
        multiply(a, b, result);
    } 

    printf("%s\n", result);

    return 0;
}

1.받을 수 있는 숫자의 최대한의 길이를 MAX_LEN으로 정해둔다. 

2.+일 때와 *일 때를 각각 고려햐여 함수로 만든다. 

3.+연산자가 들어올 경우 각 숫자들을 1의 자리부터 더하며 올려주는 방식으로 진행한다. 

4.*연산자가 들어올 경우 동적 할당을 이용한다. 

5.각 숫자들을 손으로 곱셈을 수행하는 방식처럼 곱한 뒤, 각 순서에 맞춰서 넣어준다. 

6.곱셈을 전부 한 다음, 숫자가 10 이상일 때를 고려하여 처리한다.