黑洞密码,一个细节。


这两种写法有什么不一样么,为什么第一种写法提交有部分数据不通过?

未通过代码:
#include<bits/stdc++.h>
using namespace std;
char x[20];
int y[20];
int main(){
	string a;
	cin>>a;
	int k=1,j=1;
	for(int i=0;i<32;i++){
		if(a[i]>='0'&&a[i]<='9'){ y[k]=a[i]-'0';k++;}
		else{ x[j]=a[i];j++;}
	}
	
	for(int i=1;i<=16;i++){
		if(x[i]>='A'&&x[i]<='Z'){
			x[i]=x[i]+y[i];	
			if(x[i]>'Z') x[i]=x[i]-'Z'+'a';
		}
		else if(x[i]>='a'&&x[i]<='z'){
			x[i]=x[i]+y[i];
			if(x[i]>'z') x[i]=x[i]-'z'+'A';
		}
		//cout<<x[i];
	}
	for(int i=4;i<=16;i+=4){
		for(int j=i;j>=i-3;j--){
			cout<<x[j];
		}
	}
	
	return 0;
} 

AC代码:
#include<bits/stdc++.h>
using namespace std;
char x[20];
int y[20];
int main(){
	string a;
	cin>>a;
	int k=1,j=1;
	for(int i=0;i<32;i++){
		if(a[i]>='0'&&a[i]<='9'){ y[k]=a[i]-'0';k++;}
		else{ x[j]=a[i];j++;}
	}
	
	for(int i=1;i<=16;i++){
		if(x[i]>='A'&&x[i]<='Z'){
			
			if(x[i]+y[i]>'Z') x[i]=x[i]+y[i]-'Z'+'a';
			else x[i]=x[i]+y[i];	
		}
		else if(x[i]>='a'&&x[i]<='z'){
			
			if(x[i]+y[i]>'z') x[i]=x[i]+y[i]-'z'+'A';
			else x[i]=x[i]+y[i];
		}
		//cout<<x[i];
	}
	for(int i=4;i<=16;i+=4){
		for(int j=i;j>=i-3;j--){
			cout<<x[j];
		}
	}
	
	return 0;
} 


全部评论
感谢大佬的指点,悟了,是char的范围没考虑。如果先赋值给char数组的话,可能会越界。不如先比较大小,减小后再赋值。学到了! 顺便补充一下知识点: char的范围:-128~127(2^7-1); unsigned char :0~255(2^8-1); 再次感谢大佬!
1 回复 分享
发布于 2021-01-30 20:50
顺便补充char 只到128,'z&(562)#39;+9>128,变成负数了
1 回复 分享
发布于 2021-01-30 20:28
unsigned char就可 我就是这么错了,6遍!!!!!!
点赞 回复 分享
发布于 2021-01-30 20:27
char越界了
点赞 回复 分享
发布于 2021-01-30 20:27
现在还是有问题
点赞 回复 分享
发布于 2021-01-30 19:58
这题中途改了数据😓
点赞 回复 分享
发布于 2021-01-30 19:42
再交一遍就过了
点赞 回复 分享
发布于 2021-01-30 19:41

相关推荐

05-22 09:23
门头沟学院 Java
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务