디시인사이드 갤러리

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

갤러리 본문 영역

이것도 팩토리알

iljeomobolt갤로그로 이동합니다. 2012.03.07 17:29:44
조회 55 추천 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 - -
306332 진짜 궁금한건데 자살춤이랑 삭니랑 동일 인물이냐 ? [1] ㅎㅎ(211.117) 12.03.07 53 0
306331 요즘 흔한 먹을거리.JPG [1] 때릴꺼야?(116.40) 12.03.07 179 0
306330 쿄스케형 밑에 글에 댓글단거 궁금한거 있어서.. 색초(210.57) 12.03.07 28 0
306329 요번 학기에 자료구조를 듣는데 책 꼭 사야되나 [1] 12(59.12) 12.03.07 80 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 175 0
306321 ㅋㅋㅋ공룡챗 삿음 ㅎㅎㅎㅎㅎㅎ [1] ㅋㅋㅋ(211.117) 12.03.07 83 0
306319 영어 잘하는 사람 [4] sdf(119.193) 12.03.07 101 0
306318 형들 나좀 도와줘 .... 형들 도움이 절실해!! [8] 색초(121.134) 12.03.07 115 0
306314 레알 컴싸에서 간지나는 일 좀 하려면 [2] 땡칠도사갤로그로 이동합니다. 12.03.07 153 0
306312 공학수학으로 선형대수 커버가능한가요? [1] d(121.157) 12.03.07 99 0
306311 내가 왠만하면 그냥 무슨 댓글이던 그냥 넘어가는데... [4] 바보플머(218.155) 12.03.07 130 0
306308 CString 에 한글이 왜 있나요??? [3] iljeomobolt갤로그로 이동합니다. 12.03.07 71 0
이것도 팩토리알 iljeomobolt갤로그로 이동합니다. 12.03.07 55 0
306305 또다른 팩토리알 iljeomobolt갤로그로 이동합니다. 12.03.07 45 0
306304 나 이제 코더 안하고 개발자 할껀데.. 도움좀.. 달걀소년갤로그로 이동합니다. 12.03.07 59 0
306303 팩토리알은 이걸로 끝내자 [1] iljeomobolt갤로그로 이동합니다. 12.03.07 79 0
306302 게임을 하면 사람이 폭력적으로 변한다. 퓨리님(211.234) 12.03.07 68 0
306301 아 sqlite 좋근 [성대아싸]갤로그로 이동합니다. 12.03.07 34 0
306298 요즘 한국 개발자의 대우가 좋아졌다는게 사실이냐?!! 서현빠돌이갤로그로 이동합니다. 12.03.07 121 0
306297 Ynobe 보라능 [13] 퓨리님(211.234) 12.03.07 133 0
306295 [자바국비교육]무료수강에 지원금까지 받는 교육 마법사(112.216) 12.03.07 60 0
306294 [자바국비교육] 자바국비지원으로 무료교육 지원금까지 고고~ 마법사(112.216) 12.03.07 90 0
306292 공부를 왜 하는거냐? [3] 바보플머(218.155) 12.03.07 153 0
306290 이거 왜 안되는거에요 [2] rnmn갤로그로 이동합니다. 12.03.07 57 0
306289 프갤에서 수학 이야기 나올 때 짜증나는 경우... [1] 바보플머(218.155) 12.03.07 112 0
306288 초고수형님들 학교에서 어셈블리어 프로젝트과제 있는데 어셈블리어 어려움? [13] 큰일났다(118.221) 12.03.07 166 0
306287 횽들 API 와 MFC를 배운다는 것과 할줄안다는게 뭔 뜻인가요? [10] 1234321(169.229) 12.03.07 172 0
306286 삽질 능력 이모군(175.114) 12.03.07 34 0
306279 자바와 자바스크립트의 관계는 [2] 일기는일기장에갤로그로 이동합니다. 12.03.07 81 0
306277 술먹고 래방가는건 정말 호구짓이다 NightWish갤로그로 이동합니다. 12.03.07 75 0
306275 asp.net 500 에러 발생 원인과 인위적 으로 에러 일으키는법 올체갤로그로 이동합니다. 12.03.07 36 0
306272 자바스크립트 함수 관련 질문요. [4] Ynobe갤로그로 이동합니다. 12.03.07 60 0
306271 Deitel이 쓴 c how to progam 이거 번역판 있음? [2] Lincredible갤로그로 이동합니다. 12.03.07 64 0
306270 맨날 운동을 쳐 했더니... 남대생.갤로그로 이동합니다. 12.03.07 49 0
306268 시작값부터 종료값까지의 총합중에서 짝수만 뽑는방법... [39] ㅇㅇ..(59.30) 12.03.07 123 0
306266 형들 하드디스크 하나에 os여러개 깔려면 어떻게 해야됨? [2] 스노플갤로그로 이동합니다. 12.03.07 87 0
306265 대학교 프로그래밍 어느정도로 어려워? [2] 일기는일기장에갤로그로 이동합니다. 12.03.07 82 0
306264 red bull 이 각성제인지 모르고 음료수처럼 마심 ㅋㅋㅋ [6] 일기는일기장에갤로그로 이동합니다. 12.03.07 118 0
306263 Duck Typing 이 도대체 뭐야? [2] 일기는일기장에갤로그로 이동합니다. 12.03.07 67 0
306260 생각보다 남자들 여자보는 눈이 없다능... [7] 땡칠도사갤로그로 이동합니다. 12.03.07 183 0
306259 C 언어 버전 선택부터 막히네여 가리온↘갤로그로 이동합니다. 12.03.07 38 0
306258 C언어 비주얼 스튜디오 말고 다른프로그램 뭐 있죠? [1] 장학(124.55) 12.03.07 103 0
306256 형들ㅠㅠ대학교 수업빠지면 크리임? [1] ㅇㅇ갤로그로 이동합니다. 12.03.07 468 0
306254 GNUStep 설치하고 아이폰 앱 만들어서 내 아이폰에 설치 가능??? [2] 아이폰질문(147.6) 12.03.07 95 0
306253 프로그래밍용 노트북 CPU가 1.6이랑 2.4 차이 많이 나옴? [4] 늅늅늅(210.93) 12.03.07 115 0
306252 삼성sds, LG CNS, 이런데가 대기업 SI 인가요? [1] 중컴(118.32) 12.03.07 282 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2