AOJのStrange Mathematical Expression

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

AOJのStrange Mathematical Expression

#1

投稿記事 by みけCAT » 14年前

この問題を解いています。
これが書いたコードです。

コード:

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

int main(void) {
	double stack[200];
	char temp[100];
	int stackptr=0;
	while(1) {
		if(scanf("%s",temp)==-1)break;
		if(temp[0]=='+') {
			if(stackptr<2)return 1;
			stack[stackptr-2]+=stack[stackptr-1];
			stackptr--;
		} else if(temp[0]=='-') {
			if(stackptr<2)return 1;
			stack[stackptr-2]-=stack[stackptr-1];
			stackptr--;
		} else if(temp[0]=='*') {
			if(stackptr<2)return 1;
			stack[stackptr-2]*=stack[stackptr-1];
			stackptr--;
		} else if(temp[0]=='/') {
			if(stackptr<2)return 1;
			if(stack[stackptr-1]==0)return 1;
			stack[stackptr-2]/=stack[stackptr-1];
			stackptr--;
		} else {
			stack[stackptr]=atof(temp);
			stackptr++;
		}
		if(getchar()=='\n') {
			if(stackptr!=1)return 1;
			printf("%f\n",stack[0]);
			stackptr=0;
		}
	}
	return 0;
}
これを送信すると、Runtime Errorになります。
デバッグしてみたところ、4つある

コード:

if(stackptr<2)return 1;
のところのいずれかで弾かれているようです。
ここは、スタックに積まれている数が少なすぎないかの判定をしています。
ここを取ってもRuntime Errorになります。
どこが間違っているか教えていただけると嬉しいです。
よろしくお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: AOJのStrange Mathematical Expression

#2

投稿記事 by みけCAT » 14年前

チャットで聞いて解決できました。

コード:

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

int main(void) {
	double stack[200];
	char temp[100];
	int stackptr=0;
	while(1) {
		if(scanf("%s",temp)==-1)break;
		if(strcmp(temp,"+")==0) {
			if(stackptr<2)return 1;
			stack[stackptr-2]+=stack[stackptr-1];
			stackptr--;
		} else if(strcmp(temp,"-")==0) {
			if(stackptr<2)return 1;
			stack[stackptr-2]-=stack[stackptr-1];
			stackptr--;
		} else if(strcmp(temp,"*")==0) {
			if(stackptr<2)return 1;
			stack[stackptr-2]*=stack[stackptr-1];
			stackptr--;
		} else if(strcmp(temp,"/")==0) {
			if(stackptr<2)return 1;
			if(stack[stackptr-1]==0)return 1;
			stack[stackptr-2]/=stack[stackptr-1];
			stackptr--;
		} else {
			stack[stackptr]=atof(temp);
			stackptr++;
		}
		if(getchar()=='\n') {
			if(stackptr!=1)return 1;
			printf("%f\n",stack[0]);
			stackptr=0;
		}
	}
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る