C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50659] Re:바꿔주세요.
장성호 [nasilso] 1214 읽음    2007-09-28 09:41
[질문]
올려주신 글만으로는 정확한 패턴을 알수가 없네요
2가 입력되었을때는 표현해주셨지만
3이 입력되었을때는 어떻게 표현되죠?
4...54까지 입력되었을때 사용되는 알파벳이 모두 a,b뿐인까요?
정확한 표현식을 설명해 주셔야 할듯합니다.

[의견]
1. 님의 코드에서 factorial함수는 잘만드신것 같네요
    그런데 만약 54를 입력받았을때 factorial함수가 몇번이나 호출될까요?
     for문 한번도는데만 54*2 = 108번 호출되는것 같은데..
     전체 factorial 함수 호출횟수는 108*54회가 되겠네요
    
     무슨 얘기냐면요   factorial(4) = 4 *  factorial(3) 이 잖아요
     factorial(4) 를 구하고 factorial(3) 을 구하면 , factorial(3) 은 두번 계산한것이되겟죠?
    
    for문을 돌기전에 factorial(exponent) 값을 계산하여
    그값을 따로 가지고 있다면 factorial() 함수는 다시 사용하지 않아도 될것 같은데요
    그러면 딱 입력한 횟수 exponent 값 만큼만 factorial()함수를 호출하고 해결될것 같은데...

2. for문 안에 " + " 를 출력하기위에 또 for문으로 만들어져 있던데
     가독성도 떨어지고 헷갈리던데 그냥 if문이 좋을것 같은데요..

3.  long double 값을  printf("%.f", ..)로 뿌릴경우 값이 이상한것 같네요

4. 확실히 증명해보진 못했지만 아래구문은?
     result=factorial(exponent)/(factorial(r)*factorial(exponent-r));   
    그 결과값이 항상 정수인것 같은데 double형을 쓰실 필요가 있으신지요?

5. 그리고 입력값을 54까지 받도록 했는데..
    long double 로 54팩토리얼값을 받을수 있는지 의문입니다.



[답변]
만약 
입력값이 3  일때  =  a^3+ a^2b+ ab^2 +  b^3
입력값이 4  일때  =  a^4+ a^4b+ a^2b^2 + ab^3 + b^4

위와같은 형식이라고 한다면
for문안에 result를 출력후에 아래 코드를 넣으시면 될것입니다.

            int k=exponent-r;
            if(k>1)printf("%c^%d",'a',k);
            else if(k==1)printf("%c",'a');

            if(r>1)printf("%c^%d",'b',r);
            else if(r==1)printf("%c",'b');


그럼..



배움의자세. 님이 쓰신 글 :
: #include <stdio.h>
: long double factorial(int);   
:
: int main(void)
: {
:     int exponent, r; //변수선언
:     long double result;
:
:    

:         printf("Input exponent(0 ~ 54) : ");   
:         scanf("%d", &exponent);                   
:                            
:         printf("Output : ");
:         for(r=0 ; r<=exponent ; r++)   
:         {
:            
:             result=factorial(exponent)/(factorial(r)*factorial(exponent-r));   
:             printf("%.f", result);   
:             for(;r<exponent;)           
:             {
:                 printf(" + ");
:                 break;
:             }
:        
:         }
:         printf("\n");
: }
:
: long double factorial(int number)
: {
:     if(number <= 1)
:         return 1;
:     else
:         return (number * factorial(number-1));   
: }
:
:
: 실행결과가.
: 2를 입력하면.
: input number:2
:
: output : 1+2+1
: 이런식으로 나올건데요.
: 이런 방식이 아니라.
: input number:2
:
: output : 1a^2+2ab+1b^2
: 이런방식으로 나오게하려면 어떻게 해야되나요?
:
: 그리고. 또하나는.
: 계수가 일정수를 넘어가면 정수의 한계로 인한 연산가능 범위가 한정되어있는데.
: 보다 많은 계수를 표현하려면 어떻게 해야되나요?

+ -

관련 글 리스트
50656 바꿔주세요. 배움의자세. 1194 2007/09/27
50659     Re:바꿔주세요. 장성호 1214 2007/09/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.