为什么会出现RE
  • 板块学术版
  • 楼主EasonY
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/22 22:08
  • 上次更新2024/1/23 09:42:01
查看原帖
为什么会出现RE
927419
EasonY楼主2024/1/22 22:08

我的输出和测试点的输出是一致的,为什么还会出现RE错误呢。题目P1957,题目描述 王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如

5+8 的算式最好只要输入 5 5 和 8 8,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出

5+8=13 以及该算式的总长度 6。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。

输入格式 第一行一个整数 i。

接着的 i 行为需要输入的算式,每行可能有三个数据或两个数据。

若该行为三个数据则第一个数据表示运算类型, a 表示加法运算, b 表示减法运算, c 表示乘法运算,接着的两个数据表示参加运算的运算数。

若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。

输出格式 输出 2×i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度。 这是我写的代码,是出现数组越界的问题了吗?我用的是string类型

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;

int apart(int sum){
	int i=0;
	sum=abs(sum);
	while(sum>0){
		sum/=10;
		i++;
	}
	return i;
}
int main()
{
	int a[10]={0};
	int b[10]={0};
	int n;
	cin>>n;
	cin.ignore();
	string c;
	char op;
	int count=0;
	int j=0;
	int k=0;
	for(int i=0;i<n;i++){
		getline(cin,c);
		if(c[0]>='a'&&c[0]<='c'){
			op=c[0];
//			cout<<"operator is "<<op<<endl;
		}
		while(1){
//			cout<<"c["<<j<<"]="<<c[j]<<endl;
			if(c[j]>='1'&&c[j]<='9'){
				a[k]=(int)c[j]-48;
				k++; 
			}
			if(c[j]>='1'&&c[j]<='9'&&c[j+1]==' '){
				j++;
				break;
			}
			j++;
			
		}
//		cout<<"第一个数拆解成功"<<endl;
//		for(int l=0;l<5;l++){
//			cout<<a[l]<<" ";
//		}
		count=0;
		int temp_a=k;
		k=0;//重置数组计数器 
		while(c[j]!='\0'){
			if(c[j]>='1'&&c[j]<='9'){
				b[k]=(int)c[j]-48;
				k++; 
			}
			j++;
		}
		int temp_b=k;
		k=0;
		j=0;
		int ob1=0;int ob2=0;//用于存储两个相加的数 
		for(int l=temp_a-1;l>=0;l--){
			ob1+=a[l]*pow(10,temp_a-1-l);
		}
		for(int l=temp_b-1;l>=0;l--){
			ob2+=b[l]*pow(10,temp_b-1-l);
		}
		int sum=0;
		switch(op){
			case 'a':
				sum=ob1+ob2;				
				cout<<ob1<<"+"<<ob2<<"="<<sum<<endl;
				cout<<temp_a+temp_b+apart(sum)+2<<endl;
				break;
			case 'c':
				sum=ob1*ob2;				
				cout<<ob1<<"*"<<ob2<<"="<<sum<<endl;
				cout<<temp_a+temp_b+apart(sum)+2<<endl;
				break;
			case 'b':
				sum=ob1-ob2;				
				cout<<ob1<<"-"<<ob2<<"="<<sum<<endl;
				if(sum<0){
					cout<<temp_a+temp_b+apart(sum)+3<<endl;
				}else{
					cout<<temp_a+temp_b+apart(sum)+2<<endl;
				}
				
				break;
		}
		
		for(int l=0;l<5;l++){
			a[l]=0;
			b[l]=0;
		}
	}
//	char a='1';49
//	cout<<(int)a;
}
2024/1/22 22:08
加载中...