|
[질문]
올려주신 글만으로는 정확한 패턴을 알수가 없네요
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
: 이런방식으로 나오게하려면 어떻게 해야되나요?
:
: 그리고. 또하나는.
: 계수가 일정수를 넘어가면 정수의 한계로 인한 연산가능 범위가 한정되어있는데.
: 보다 많은 계수를 표현하려면 어떻게 해야되나요?
|