게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
(공부중)다항식 덧셈하는 프로그램 만들고 있는데요
게시물ID : programmer_9734짧은주소 복사하기
작성자 : 두루말이휴지
추천 : 0
조회수 : 489회
댓글수 : 3개
등록시간 : 2015/05/05 14:52:56
#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
 
만약 위 식을 계산 가능하게 만들려면 어떻게 코드를 다시 짜야할까요???
제 머리로는 저게 한계네요....
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호