求解cin.getline为什么会WA掉但scanf不会?
查看原帖
求解cin.getline为什么会WA掉但scanf不会?
225964
entity楼主2020/11/6 21:09

使用scanf,得分:100

//rerite for 3 time
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
/*
2
10011

*/
int a[201],b[201]={},lena,x,n,cnt=0;
char tmp[201]={};
void reverseToB(){
	for(int i=0;i<lena;i++)
		b[lena-i-1]=a[i];
	return ;
}
bool check(){
	for(int i=0;i<lena-i-1;i++)
		if(a[i]!=a[lena-i-1]) return false;
	return true;
}
int main(){
	scanf("%d\n",&n);
	scanf("%s",tmp);
	lena=strlen(tmp);
	for(int i=0;i<lena;i++){
		if(tmp[i]=='A') a[i]=10;
		else if(tmp[i]=='B') a[i]=11;
		else if(tmp[i]=='C') a[i]=12;
		else if(tmp[i]=='D') a[i]=13;
		else if(tmp[i]=='E') a[i]=14;
		else if(tmp[i]=='F') a[i]=15;
		else a[i]=tmp[i]-'0'; 
	}
	while(!check()){
		if(cnt>30){
			printf("Impossible!");
			return 0;
		}
		reverseToB();
		x=0;
		for(int i=0;i<lena;i++){
			a[i]+=b[i]+x;
			x=a[i]/n;
			a[i]%=n;
		}
		if(x) a[lena++]=x;
		cnt++;
		/*
        for(int i=0;i<lena;i++)
            printf("%d",a[i]);
        printf(" ");
        for(int i=0;i<lena;i++)
            printf("%d",b[i]);
		printf(" %d\n",cnt);
		*/
	}
	printf("STEP=%d",cnt);
	return 0;
}

使用cin.getline,得分:25

//rerite for 3 time
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
/*
2
10011

*/
int a[201],b[201]={},lena,x,n,cnt=0;
char tmp[201]={};
void reverseToB(){
	for(int i=0;i<lena;i++)
		b[lena-i-1]=a[i];
	return ;
}
bool check(){
	for(int i=0;i<lena-i-1;i++)
		if(a[i]!=a[lena-i-1]) return false;
	return true;
}
int main(){
	scanf("%d\n",&n);
	cin.getline(tmp,100);
	lena=strlen(tmp);
	for(int i=0;i<lena;i++){
		if(tmp[i]=='A') a[i]=10;
		else if(tmp[i]=='B') a[i]=11;
		else if(tmp[i]=='C') a[i]=12;
		else if(tmp[i]=='D') a[i]=13;
		else if(tmp[i]=='E') a[i]=14;
		else if(tmp[i]=='F') a[i]=15;
		else a[i]=tmp[i]-'0'; 
	}
	while(!check()){
		if(cnt>30){
			printf("Imposiible!");
			return 0;
		}
		reverseToB();
		x=0;
		for(int i=0;i<lena;i++){
			a[i]+=b[i]+x;
			x=a[i]/n;
			a[i]%=n;
		}
		if(x) a[lena++]=x;
		cnt++;
//		printf("%s %s %d\n",a,b,cnt);
	}
	printf("STEP=%d",cnt);
	return 0;
}

求解!!!

2020/11/6 21:09
加载中...