디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

이것도 팩토리알

iljeomobolt갤로그로 이동합니다. 2012.03.07 17:29:44
조회 54 추천 0 댓글 0


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

/*  이 값이 최대 연산 가능한 자리수이다.
이 값을 늘리면 더 많은 자리수도 연산가능해진다.
하지만 system memory가 허락하는 범위 안에서 가능하다. */
#define MAX_BUFF_SIZE   5000000

void deohagi(char *, char *, char *);
void bbegi(char *, char *, char *);
void gobhagi(char *, char *, char *);
void nanugi(char *, char *, char *);
void fac(char *, char *);

void outfile(char *, char *, char *, char);

main()
{
  char *a;
  char *b;
  char c;
  char *result;
  int i;

  a = (char *)malloc(MAX_BUFF_SIZE);
  b = (char *)malloc(MAX_BUFF_SIZE);
  result = (char *)malloc(MAX_BUFF_SIZE);



 cont:

  for(i=0;i<MAX_BUFF_SIZE;i++){
    a[i] = b[i] = result[i] = '\0';
  }

  printf("input number a->");
  gets(a);

  if(strlen(a) > MAX_BUFF_SIZE){
    printf("input error 첨부터 다시..\n");
    goto cont;
  }

  printf("연산방식 입력( + - * / ! )-> ");
  gets(result);
  c = result[0];
  strcpy(result, "0");
  if(c != '+' && c != '-' && c != '*' && c != '/' && c != '!'){
    printf("input error 첨부터 다시..\n");
    goto cont;
  }

  if(c != '!'){
    printf("input number b->");
    gets(b);

    if(strlen(b) > MAX_BUFF_SIZE){
      printf("input error 첨부터 다시..\n");
      goto cont;
    }
  }

  //  printf("값을 입력해라.. ex)1000 + 1000) 연산은 + - * / !\n");
  //  scanf("%s %c %s", a, &c, b);
  //  getchar(); // 마지막 엔터 읽어서 없에기..

  if(c != '+' && c != '-' && c != '*' && c != '/' && c != '!'){
    printf("input error 연산자, 첨부터 다시..\n");
    goto cont;
  }
  if(strlen(a) > MAX_BUFF_SIZE){
    printf("input error A수 , 첨부터 다시..\n");
    goto cont;
  }
  if(strlen(b) > MAX_BUFF_SIZE){
    printf("input error 뒷수,  첨부터 다시..\n");
    goto cont;
  }

  if(c == '+'){
    deohagi(a, b, result);
    printf("'%s'\n",result);
    //    outfile(a, b, result, c);
  }else if(c == '-'){
    bbegi(a, b, result);
    printf("'%s'\n",result);
    //    outfile(a, b, result, c);
  }else if(c == '*'){
    gobhagi(a, b, result);
    printf("'%s'\n",result);
    //    outfile(a, b, result, c);
  }else if(c == '/'){
    nanugi(a, b, result);
    printf("'%s'\n",result);
    //    outfile(a, b, result, c);
  }else if(c == '!'){
    fac(a, result);
    printf("'%s'\n",result);
    outfile(a, "", result, c);
  }

 KIN:
  printf(" \n");
exit(0);
  gets(result);
  c = result[0];
  if(c == '2'){
    exit(0);
  }else if(c == '1'){
    goto cont;
  }else{
    printf("똑바로 입력해라\n");
    goto KIN;
  }

}

// 0: 48, 9:57
void deohagi(char *a, char *b, char *result)
{
  int i;
  int lenA, lenB, lenC;
  int smallRst, smallPa;
  char *temp;

  temp = (char *)malloc(MAX_BUFF_SIZE);

  smallRst = smallPa = 0;

  lenA = strlen(a)-1;
  lenB = strlen(b)-1;
  lenC = 0;

  for(i=0;i<MAX_BUFF_SIZE;i++, lenA--, lenB--){
    if(lenA > -1 && lenB > -1){
      smallRst = (a[lenA] - 48) + (b[lenB] - 48) + smallPa;
      smallPa = smallRst>=10 ? 1 : 0 ;
      smallRst = smallRst % 10;
      temp[i] = smallRst + 48;
    }else{
      if(lenA > -1){
        smallRst = (a[lenA] - 48) + smallPa;
        smallPa = smallRst>=10 ? 1 : 0 ;
        smallRst = smallRst % 10;
        temp[i] = smallRst + 48;
      }else if(lenB > -1){
        smallRst = (b[lenB] - 48) + smallPa;
        smallPa = smallRst>=10 ? 1 : 0 ;
        smallRst = smallRst % 10;
        temp[i] = smallRst + 48;
      }else{
        temp[i] = smallPa + 48;
        temp[i+1] = '\0';
        break;
      }
    }//  if(lenA > -1 && lenB > -1){
  }

  if(smallPa)
    i++;

  for(lenC=0;i>=0;i--,lenC++){
    result[lenC-1] = temp[i];
  }
  result[lenC] = '\0';

  free(temp);
}


void gobhagi(char *a, char *b, char *result)
{
  int i,j;
  int lenB;
  char *aa;
  char *bb;

  aa = (char *)malloc(MAX_BUFF_SIZE);
  bb = (char *)malloc(MAX_BUFF_SIZE);

  strcpy(aa, "0");
  strcpy(bb, a);
  lenB = strlen(b) -1;

  for(i=0;lenB > -1;i++, lenB--){
    j = b[lenB] - 48;

    for(;j>0;j--){              /*  */
      deohagi(aa, bb, result);
      strcpy(aa, result);
    }
    strcat(bb,"0");
  }

  free(aa);
  free(bb);
}


void bbegi(char *a, char *b, char *result)
{
  int i;
  int lenA, lenB, lenC;
  int smallRst, smallPa;

  int isMinus=0;
  char *temp, *aa, *bb;
  char *p, *q;


  temp = (char *)malloc(MAX_BUFF_SIZE);
  aa = (char *)malloc(MAX_BUFF_SIZE);
  bb = (char *)malloc(MAX_BUFF_SIZE);

  smallRst = smallPa = 0;

  lenA = strlen(a)-1;
  lenB = strlen(b)-1;
  lenC = 0;

  strcpy(aa, a);
  strcpy(bb, b);

  if(lenA < lenB){
    isMinus = 1;
  }else if(lenA == lenB){
    if(a[0] < b[0]){
      isMinus = 1;
    }
  }

 min:
  if(isMinus){
    strcpy(temp, aa);
    strcpy(aa, bb);
    strcpy(bb, temp);
    lenA = strlen(aa)-1;
    lenB = strlen(bb)-1;
  }

  for(i=0;i<MAX_BUFF_SIZE;i++, lenA--, lenB--){
    if(lenA > -1 && lenB > -1){
      smallRst = (aa[lenA] - 48) - (bb[lenB] - 48) - smallPa;
      smallPa = 0;
      if(smallRst < 0){
        smallRst += 10;
        smallPa = 1;
      }
      temp[i] = smallRst + 48;
    }else{
      if(lenA > -1){
        smallRst = (aa[lenA] - 48) - smallPa;
        smallPa = 0;
        if(smallRst < 0){
          smallRst += 10;
          smallPa = 1;
        }
        smallRst = smallRst % 10;
        temp[i] = smallRst + 48;
      }else if(lenB > -1){
        smallRst = (bb[lenB] - 48) - smallPa;
        smallPa = 0;
        if(smallRst < 0){
          smallRst += 10;
          smallPa = 1;
        }
        smallRst = smallRst % 10;
        temp[i] = smallRst + 48;
      }else{
        if(smallPa){
          smallPa = 0;
          isMinus = 1;
          goto min;
        }
        //      temp[i] = smallPa + 48 ;
        temp[i] = '\0';
        break;
      }
    }//  if(lenA > -1 && lenB > -1){
  }

  lenC=0;
  if(isMinus){
    result[0] = '-';
    lenC += 2;
    i--;
  }

  for(;i>=0;i--){
    result[lenC-1] = temp[i];
    lenC++;
  }
  result[lenC] = '\0';

  q = p = result;
  while(*p){
    if(*p == '-'){
      p++;
      q++;
    }else if(*p == '0'){
      p++;
    }else{
      strcpy(q, p);
      break;
    }
  }

  free(temp);
  free(aa);
  free(bb);

}



int nanugiLoop = 0;

void nanugi(char *a, char *b, char *result)
{
  char *aa, *bb, *cc, *temp, *temp1;

  aa = (char *)malloc(MAX_BUFF_SIZE);
  bb = (char *)malloc(MAX_BUFF_SIZE);
  cc = (char *)malloc(MAX_BUFF_SIZE);
  temp = (char *)malloc(MAX_BUFF_SIZE);
  temp1 = (char *)malloc(MAX_BUFF_SIZE);




  strcpy(aa, a);
  strcpy(bb, b);
  strcpy(cc, "0");

  while(1){
    memset(temp1, 0, MAX_BUFF_SIZE);
    memset(temp, 0, MAX_BUFF_SIZE);
    bbegi(aa, bb, temp);
    if(temp[0] != '-' ){
      if(temp[0] == '0'){
        deohagi(cc, "1", temp1);
        break;
      }

      strcpy(aa, temp);
      deohagi(cc, "1", temp1);
      strcpy(cc, temp1);
    }else{
      break;
    }
  }

  strcpy(result, temp[0] != '-' ? temp1 : cc);
  if(temp1[0] != '0' || temp1[0] != '-'){
    char *aaa;
    char *bbb;
    char *ccc;

    aaa = (char *)malloc(MAX_BUFF_SIZE);
    bbb = (char *)malloc(MAX_BUFF_SIZE);
    ccc = (char *)malloc(MAX_BUFF_SIZE);

    if(nanugiLoop++ < 30){
      strcpy(aaa, temp[0] == '-' ? aa : temp);
      strcpy(bbb, "10");
      gobhagi(aaa, bbb, ccc);
      //      printf("%2d : %s * %s = %s\n",nanugiLoop ,aaa,bbb,ccc);
      nanugi(ccc, b, bbb);
      //      printf("%2d : %s / %s = %s\n",nanugiLoop ,ccc,b,bbb);
    } /* if(nanugiLoop < 30){ */

    if(strcmp(bbb,"0") == 0) strcpy(bbb,"");

    if(nanugiLoop-- > 1){
      strcat(result, bbb);
    }else{
      strcat(result, ".");
      strcat(result, bbb);
    } /* if(nanugiLoop-- > 0){ */
    //    strcat(result, " 나머지 ");
    //    strcat(result, temp[0] == '-' ? aa : temp);
    free(aaa);
    free(bbb);
    free(ccc);
  }

  free(temp);
  free(temp1);
  free(aa);
  free(bb);
  free(cc);
}

void fac(char *a, char *result)
{
  char *aa;
  char *bb;
  char *rst;

  aa = (char *)malloc(MAX_BUFF_SIZE);
  bb = (char *)malloc(MAX_BUFF_SIZE);
  rst = (char *)malloc(MAX_BUFF_SIZE);

  strcpy(aa, a);
  strcpy(rst, a);
  do{
    bbegi(aa, "1", bb);
    strcpy(aa,bb);
    printf("now -> %s\n", bb);
    gobhagi(rst, bb, result);
    strcpy(rst, result);
  }while(strcmp(bb, "2"));


  free(aa);
  free(bb);
  free(rst);
}



void outfile(char *a, char *b, char *c, char d)
{
  FILE *fp;

  fp = fopen("infile.txt", "w");
  fprintf(fp,"%s %c %s", a, d, b);
  fclose(fp);

  fp = fopen("outfile.txt", "w");
  fprintf(fp,"%s", c);
  fclose(fp);
}

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 대박 날 것 같아서 내 꿈에 나와줬으면 하는 스타는? 운영자 25/11/17 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
306409 음.. 편입이 좋은까... 대학원진학이 좋을까.. [1] HoRo-HIME갤로그로 이동합니다. 12.03.08 107 0
306407 심심해서 테트리스 만드는 중인데 이거 왜이런지좀 알려줘 횽들 [5] 응잉앙앵(203.250) 12.03.08 91 0
306406 근데.. 발표같은거 많이함??? [1] HoRo-HIME갤로그로 이동합니다. 12.03.08 36 0
306405 내가 니들 위해서 이번주 로또 1등 당첨 가능성이 가장 높은 번호 [7] iljeomobolt갤로그로 이동합니다. 12.03.08 541 3
306403 소프트웨어 프로젝트 어떤종류로 만드는게 좋나요? [1] 프로젝트학생(121.177) 12.03.08 56 0
306399 횽들 임베디드 테크점 알려주삼 굽신굽신 [1] 우억우억(211.234) 12.03.08 119 0
306398 프로젝트 대행해주실 분 구합니다 [12] 공돌이대장갤로그로 이동합니다. 12.03.08 171 0
306394 프로그래밍 입문자가 볼만한 tcp/ip 책 추천 좀 해주세영 [8] 모미지갤로그로 이동합니다. 12.03.08 205 0
306392 목숨건 문제하나 내봄 [6] ㅋㅋ(118.36) 12.03.08 143 0
306391 프게아들 키보드위에 손잇을때 버릇같은거업음?? [10] HarlemLuiah갤로그로 이동합니다. 12.03.08 121 0
306390 HWP 편집 모듈 같이 개발할 용자 어디 없냐? [2] 아놔콘다갤로그로 이동합니다. 12.03.08 173 0
306389 퇴근해보겠습니다는 무슨 말이냐? [15] 올체갤로그로 이동합니다. 12.03.08 412 1
306388 용돈 벌이가 시작되었다... 아놔콘다갤로그로 이동합니다. 12.03.08 78 0
306386 갤로그 마크에 노란색 뭐냐 [6] 알렉산더갤로그로 이동합니다. 12.03.08 88 0
306385 중3 스카웃 블로그 이 놈 이 기세라면.... [2] 야요이갤로그로 이동합니다. 12.03.08 129 0
306384 대기업 입사 성공한 고3 학생.... 야요이갤로그로 이동합니다. 12.03.08 127 0
306380 고속도로에서 강제로 휴게소 보내기. iljeomobolt갤로그로 이동합니다. 12.03.08 85 0
306379 이 총 종류가 뭐야? 반동이 생각보다 작내.. [5] iljeomobolt갤로그로 이동합니다. 12.03.08 93 0
306378 야 자살춤 [2] 정수정•‿•갤로그로 이동합니다. 12.03.08 69 0
306376 문과로 컴공 가면 수업 못 따라감? [4] (211.58) 12.03.08 159 0
306374 C 언어 꼭 배워야되? [6] 일기는일기장에갤로그로 이동합니다. 12.03.08 224 0
306372 디아블로3 4월 17일 출시 [1] 알렉산더갤로그로 이동합니다. 12.03.08 75 0
306369 철야 작업 [1] 올체갤로그로 이동합니다. 12.03.08 67 0
306368 C언어 강의를 블로그에 몇개 쓰니 4시간이 금방감 [1] 남대생.갤로그로 이동합니다. 12.03.08 161 0
306366 형들 가고 싶은 대학 과가 없어서 [1] 시발(211.58) 12.03.08 64 0
306362 오늘 ipad3 나오넹 [1] 시불라미갤로그로 이동합니다. 12.03.08 82 0
306361 아! 내가 주인공이다. [1] [성대아싸]갤로그로 이동합니다. 12.03.07 90 0
306357 내가 전문대에 다니는데.. [11] HoRo-HIME갤로그로 이동합니다. 12.03.07 319 0
306356 파워포인트받을수잇는곳없나요? [4] 부와아아아앙갤로그로 이동합니다. 12.03.07 63 0
306353 군대에 보급된 PC, 장비는 맛이갔어 [4] Tanny Tales갤로그로 이동합니다. 12.03.07 124 0
306351 DB 처음 배우려면 어떤 책을 골라야하죠? [3] 先鎭(218.52) 12.03.07 94 0
306350 군대 인터넷 PC에 쓰는 컴퓨터 프로그램 장애 일으키면서 쓰기 Tanny Tales갤로그로 이동합니다. 12.03.07 65 0
306349 ㅅㅂ 퇴근하고 싶어 [1] 전간디갤로그로 이동합니다. 12.03.07 61 0
306348 학교 커뮤니티 긁어오니 [2] [성대아싸]갤로그로 이동합니다. 12.03.07 128 0
306343 자바 실무에서 struts2태그랑 jstl중 어떤것을 더 선호하나요? [1] 파워트윈테일갤로그로 이동합니다. 12.03.07 57 0
306342 고려대 정보통신대학 좋아? [1] ㅇㅇ(121.160) 12.03.07 103 0
306341 형님들 뉴비에게 WPF 책좀 추천해주세용 'ㅅ' Re-FEEL갤로그로 이동합니다. 12.03.07 183 0
306340 앞으로 자주 올거다 시팔롬들아 [3] PoRO갤로그로 이동합니다. 12.03.07 89 0
306339 c언어 입문합니다 [3] ㅇㅇ(121.160) 12.03.07 98 0
306338 퇴근 한다. 헤헤 [2] 개떙보갤로그로 이동합니다. 12.03.07 51 0
306337 iis6 사용자 오류페이지 지정 이슈좀 봐주라 올체갤로그로 이동합니다. 12.03.07 32 0
306332 진짜 궁금한건데 자살춤이랑 삭니랑 동일 인물이냐 ? [1] ㅎㅎ(211.117) 12.03.07 52 0
306331 요즘 흔한 먹을거리.JPG [1] 때릴꺼야?(116.40) 12.03.07 176 0
306330 쿄스케형 밑에 글에 댓글단거 궁금한거 있어서.. 색초(210.57) 12.03.07 28 0
306329 요번 학기에 자료구조를 듣는데 책 꼭 사야되나 [1] 12(59.12) 12.03.07 79 0
306328 티스토리 블로그 상단에 유튭동영상 8개 넣었는데 [1] 파워트윈테일갤로그로 이동합니다. 12.03.07 49 0
306327 야 부산/경남에서 내가 안드로이드 좀 한다하는 잉여? 레알 횽이 선물줄께 [1] 구글빠(203.250) 12.03.07 74 0
306325 정보보호 /보안 쪽 가려면 OS 공부 필수인가? [3] ㅁㅇㄴㄹ(211.117) 12.03.07 119 0
306324 여기가 프로그래밍 갤러리야? ㅇvㅇ [7] PoRO갤로그로 이동합니다. 12.03.07 114 0
306323 ★★★피해피해 온라인 아십니까 [10] _LD갤로그로 이동합니다. 12.03.07 173 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2