关于洛谷IDE的疑问
查看原帖
关于洛谷IDE的疑问
288305
MrDoge楼主2022/11/29 21:27

求助代码在本地没有问题,在洛谷在线ide上测试,只算一组数的时候没有问题,只要输入多组数就只有最后一组是正常的,剩下的每一组的第二个数都会变成一些奇怪的数,这是什么原理。。。

比如在洛谷ide输入

2

a 10 4

10 4

就会输出

10+5=15

8

10+4=14

7

但是本地真的没有问题

(洛谷要比本地多加一个getchar();才能正常输入也不知道为什么。。。)

#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;
char all[100], ca[10], cb[10];
int x1[100], x2[100], x3[100], x4[100];
char s1[100];
int main(){
	int n;
	char f;
	int i = 0, cnt = 0, na = 0, nb = 0, numa = 0, numb = 0, out;
	scanf("%d", &n);
	getchar(); 
    getchar();
	for(int k = 1; k <= n; k++){
		memset(all, '\0', sizeof(all));
		memset(ca, '\0', sizeof(ca));
		memset(cb, '\0', sizeof(cb));
		gets(all);
		if(all[0] == 'a' || all[0] == 'b' || all[0] == 'c'){
			switch(all[0]){
				case 'a':
					f = '+';
					cnt = 0, numa = 0, numb = 0;
					for(i = 2; all[i] != ' '; i++){
						ca[cnt] = all[i];
						cnt++;
					}
					cnt = 0;
					for(i++; all[i] != '\0'; i++){
						cb[cnt] = all[i];
						cnt++;
					}
					for(na = 0; ca[na] != '\0'; na++);
					na--;
					for(nb = 0; cb[nb] != '\0'; nb++);
					nb--;
					cnt = na;
					for(int j = 0; j <= na; j++){
						numa += (ca[j]-'0')*pow(10, cnt);
						cnt--;
					}
					cnt = nb;
					for(int j = 0; j <= nb; j++){
						numb += (cb[j]-'0')*pow(10, cnt);
						cnt--;
					}
					s1[k] = f;
					x1[k] = numa;
					x2[k] = numb;
					x3[k] = numa+numb;
					out = numa+numb;
					cnt = na+nb+2+2;
					while(out){
						cnt++;
						out /= 10;
					}
					x4[k] = cnt;
					break;
				case 'b':
					f = '-';
					cnt = 0, numa = 0, numb = 0;
					for(i = 2; all[i] != ' '; i++){
						ca[cnt] = all[i];
						cnt++;
					}
					cnt = 0;
					for(i++; all[i] != '\0'; i++){
						cb[cnt] = all[i];
						cnt++;
					}
					for(na = 0; ca[na] != '\0'; na++);
					na--;
					for(nb = 0; cb[nb] != '\0'; nb++);
					nb--;
					cnt = na;
					for(int j = 0; j <= na; j++){
						numa += (ca[j]-'0')*pow(10, cnt);
						cnt--;
					}
					cnt = nb;
					for(int j = 0; j <= nb; j++){
						numb += (cb[j]-'0')*pow(10, cnt);
						cnt--;
					}
					s1[k] = f;
					x1[k] = numa;
					x2[k] = numb;
					x3[k] = numa-numb;
					out = numa-numb;
					if(numa-numb>=0){
						cnt = na+nb+2+2;
						while(out){
							cnt++;
							out /= 10;
						}
						x4[k] = cnt;
					}
					else{
						cnt = na+nb+2+3;
						out = -out;
						while(out){
							cnt++;
							out /= 10;
						}
						x4[k] = cnt;
					}
					break;
				case 'c':
					f = '*';
					cnt = 0, numa = 0, numb = 0;
					for(i = 2; all[i] != ' '; i++){
						ca[cnt] = all[i];
						cnt++;
					}
					cnt = 0;
					for(i++; all[i] != '\0'; i++){
						cb[cnt] = all[i];
						cnt++;
					}
					for(na = 0; ca[na] != '\0'; na++);
					na--;
					for(nb = 0; cb[nb] != '\0'; nb++);
					nb--;
					cnt = na;
					for(int j = 0; j <= na; j++){
						numa += (ca[j]-'0')*pow(10, cnt);
						cnt--;
					}
					cnt = nb;
					for(int j = 0; j <= nb; j++){
						numb += (cb[j]-'0')*pow(10, cnt);
						cnt--;
					}
					s1[k] = f;
					x1[k] = numa;
					x2[k] = numb;
					x3[k] = numa*numb;
					out = numa*numb;
					cnt = na+nb+2+2;
					while(out){
						cnt++;
						out /= 10;
					}
					x4[k] = cnt;
					break;
			}
			
		}
		else{
			switch(f){
				case '+':
					cnt = 0, numa = 0, numb = 0;
					for(i = 0; all[i] != ' '; i++){
						ca[cnt] = all[i];
						cnt++;
					}
					cnt = 0;
					for(i++; all[i] != '\0'; i++){
						cb[cnt] = all[i];
						cnt++;
					}
					for(na = 0; ca[na] != '\0'; na++);
					na--;
					for(nb = 0; cb[nb] != '\0'; nb++);
					nb--;
					cnt = na;
					for(int j = 0; j <= na; j++){
						numa += (ca[j]-'0')*pow(10, cnt);
						cnt--;
					}
					cnt = nb;
					for(int j = 0; j <= nb; j++){
						numb += (cb[j]-'0')*pow(10, cnt);
						cnt--;
					}
					out = numa+numb;
					s1[k] = f;
					x1[k] = numa;
					x2[k] = numb;
					x3[k] = numa+numb;
					cnt = na+nb+2+2;
					while(out){
						cnt++;
						out /= 10;
					}
					x4[k] = cnt;
					break;
				case '-':
					cnt = 0, numa = 0, numb = 0;
					for(i = 0; all[i] != ' '; i++){
						ca[cnt] = all[i];
						cnt++;
					}
					cnt = 0;
					for(i++; all[i] != '\0'; i++){
						cb[cnt] = all[i];
						cnt++;
					}
					for(na = 0; ca[na] != '\0'; na++);
					na--;
					for(nb = 0; cb[nb] != '\0'; nb++);
					nb--;
					cnt = na;
					for(int j = 0; j <= na; j++){
						numa += (ca[j]-'0')*pow(10, cnt);
						cnt--;
					}
					cnt = nb;
					for(int j = 0; j <= nb; j++){
						numb += (cb[j]-'0')*pow(10, cnt);
						cnt--;
					}
					out = numa-numb;
					s1[k] = f;
					x1[k] = numa;
					x2[k] = numb;
					x3[k] = numa-numb;
					if(numa-numb>=0){
						cnt = na+nb+2+2;
						while(out){
							cnt++;
							out /= 10;
						}
						x4[k] = cnt;
					}
					else{
						cnt = na+nb+2+3;
						out = -out;
						while(out){
							cnt++;
							out /= 10;
						}
						x4[k] = cnt;
					}
					break;
				case '*':
					cnt = 0, numa = 0, numb = 0;
					for(i = 0; all[i] != ' '; i++){
						ca[cnt] = all[i];
						cnt++;
					}
					cnt = 0;
					for(i++; all[i] != '\0'; i++){
						cb[cnt] = all[i];
						cnt++;
					}
					for(na = 0; ca[na] != '\0'; na++);
					na--;
					for(nb = 0; cb[nb] != '\0'; nb++);
					nb--;
					cnt = na;
					for(int j = 0; j <= na; j++){
						numa += (ca[j]-'0')*pow(10, cnt);
						cnt--;
					}
					cnt = nb;
					for(int j = 0; j <= nb; j++){
						numb += (cb[j]-'0')*pow(10, cnt);
						cnt--;
					}
					out = numa*numb;
					s1[k] = f;
					x1[k] = numa;
					x2[k] = numb;
					x3[k] = numa*numb;
					cnt = na+nb+2+2;
					while(out){
						cnt++;
						out /= 10;
					}
					x4[k] = cnt;
					break;
			}
		}
	}
	for(int k = 1; k <= n; k++){
		printf("%d%c%d=%d\n%d\n", x1[k], s1[k], x2[k], x3[k], x4[k]);
	}
}
2022/11/29 21:27
加载中...