#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define max 100
#define big_max(a,b) ((a)>(b)?(a):(b))
struct dahang {
int x;
int n;
};
dahang a_dahang[max];
dahang b_dahang[max];
dahang c_dahang[max];
int big;
void input1() {
char a[max]; int a1[max] = { NULL };
char b[max]; int b1[max] = { NULL };
int i = 0; int n1 = 0; int m1 = 0;
int j = 0; int n2 = 0; int m2 = 0;
char *A;
char *B;
printf("A 다항식을 입력하세요 : ");
gets_s(a);
printf("B 다항식을 입력하세요 : ");
gets_s(b);
A = a;
B = b;
while (*A) {
if (isdigit(*A)) {
a1[i++] = strtol(A, NULL, 10);
while (isdigit(*A)) A++;
}
else A++;
}
while (*B) {
if (isdigit(*B)) {
b1[j++] = strtol(B, NULL, 10);
while (isdigit(*B)) B++;
}
else B++;
}
while(n1<i) {
if (a1[m1] != NULL) {
a_dahang[n1].x = a1[m1++];
a_dahang[n1].n = a1[m1++];
}
else break;
n1++;
}
while (n2<j) {
if (b1[m2]!=NULL) {
b_dahang[n2].x = b1[m2++];
b_dahang[n2].n = b1[m2++];
}
else break;
n2++;
}
big =big_max(n1,n2);
}
void add() {
int i;
int as = 0;
int bs = 0;
printf("\n결과값 : ");
for (i = 0; i <= big; i++) {
if (a_dahang[as].n > b_dahang[bs].n) {
c_dahang[i].x = a_dahang[as].x;
c_dahang[i].n = a_dahang[as].n;
as++;
}
else if (a_dahang[as].n == b_dahang[bs].n) {
c_dahang[i].x = a_dahang[as].x + b_dahang[bs].x;
c_dahang[i].n = a_dahang[as].n;
as++; bs++;
}
else if (a_dahang[as].n < b_dahang[bs].n){
c_dahang[i].x = b_dahang[bs].x;
c_dahang[i].n = b_dahang[bs].n;
bs++;
}
}
for (i = 0; i <= big; i++) {
if (c_dahang[i].n)
printf("%dx^%d+", c_dahang[i].x, c_dahang[i].n);
else {
if (c_dahang[i].x != 0)
printf("%d\n", c_dahang[i].x);
}
}
}
int main() {
input1();
add();
}
코드가 스파게티인건 애교로 봐주시고....
변수명이 알아보기 힘든것도 애교로 봐주시고.... ㅜㅠ;;;
제가 문자열로 다항식을 입력받고 싶은 욕심에 저렇게 짜봣거든요
일단 나오긴 하는것 같은데 저런식으로 하니깐
2y^2+2x^2+1
2x^2+1
같은 다항식은 계산이 불가능....
물론 문자만 들어가면
33r33tgg43
3r3dd1
같은 말도안되는 식도 정상적인 식처럼 둔갑해서 나오는건또 함정...
저게 문자열에서 숫자만 골라내서 다시 배열에 넣은후에
지수랑 계수를 분리해서 더하는 방식인데.... 너무 비효율적인것 같고.... printf문으로 하트 별 만드는것 같고....
2y^2+2x^2+1
2x^2+1
만약 위 식을 계산 가능하게 만들려면 어떻게 코드를 다시 짜야할까요???
제 머리로는 저게 한계네요....