アプリ版:「スタンプのみでお礼する」機能のリリースについて

四則演算に加えてべき乗、階乗を使えるような電卓を作りたいのです。
四則演算は
#include <stdio.h>
#include <ctype.h>


void Factor( int *x );
void MulDiv( int *x );
void AddSub( int *x );
int expression( void );



int main( void )
{
printf( "%d\n", expression() );
return 0;
}



void Factor( int *x )
{
int num = 0, flag = 1, c = 0;

c = fgetc( stdin );

if( c == '-' || c == '+' ){
c = fgetc( stdin );
flag = (c == '+' ) ? 1 : -1;
}

if( isdigit(c) ){
int n = 0;
while( isdigit(c) ){
n = n * 10 + ( c - '0' );
c = fgetc( stdin );
}
num = n * flag;

}else{
if( c == '(' ){
num = expression();
if( fgetc( stdin ) != ')' ){
exit(-1);
}
c = 0x0100;
}
}

if( c != 0x0100 )
ungetc( c, stdin );

(*x) = num;
}



void MulDiv( int *x )
{
int num = 0, c = 0;

Factor( x );
num = (*x);

c = fgetc( stdin );

while( c == '*' || c == '/' || c == '%' ){

switch( c )
{
case '*':
Factor( x );
num = num * (*x);
break;

case '/':
Factor( x );
num = num / (*x);
break;

case '%':
Factor( x );
num = num % (*x);
break;
}

c = fgetc( stdin );
}

ungetc( c, stdin );
(*x) = num;
}



void AddSub( int *x )
{
int num = 0, c = 0;

MulDiv( x );
num = (*x);

c = fgetc( stdin );

while( c == '+' || c == '-' ){

switch( c )
{
case '+':
MulDiv( x );
num = num + (*x);
break;

case '-':
MulDiv( x );
num = num - (*x);
break;
}

c = fgetc( stdin );
}

ungetc( c, stdin );
(*x) = num;
}



int expression( void )
{
int x = 0;
AddSub( &x );
return x;
}
これで正しく動くことを確認できたのですが、階乗、べき乗の書き方が全くわかりません。どなたか、詳しい方いらっしゃいましたら、ご教授願います。

A 回答 (1件)

具体的に、何がわからないのですか?


・階乗、べき乗の表記方法?
・計算方法?

表記方法は指定されてなければ御自身で決めればいいでしょう。
数学では階乗には ! ( nの階乗なら n! )ですから、それを使えばいいでしょう。
べき乗の上付き文字は表現できませんが、よく使われるのは
^ ( Xのn乗なら X ^ n )
ですよ。

計算方法は、それぞれの定義を考えれば、それほど難しくないはずです。
(べき乗で非整数乗でなければ)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。どのようなプログラムを書けば正常に計算が行えるかという感じで質問してました。特に指定はないので、kmeeさんのようにしたいと思います。
一応自己解決できました。ありがとうございます。

お礼日時:2010/01/14 00:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!