Sqytih @ 2024-07-03 14:15:52
下载的第七个数据点和题目给的一样,这个点本地能过洛谷不行.
我看在讨论区中说scanf不行,但我写cin呢?
是由于\n\r的问题吗?
对于我用cin输入应该怎么解决?
这种情况会在正式比赛出现吗?
还请各位大佬解惑
关于代码的一点解释:
在输入abc还是数字处理方面的思路是先都存在一个string里通过判断string[0]是不是a||b||c,如果是另外输入两个数字,反之将string里的转化成数字并再输入另一个数字.
代码中的len( )作用是求整数的位数, trans( )作用将string中的数字转成int数字.
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
char mode;
int n;
int len(int a){
if(a == 0) return 1;
int l = 0;
while(a > 0){
l++;
a /= 10;
}
return l;
}
int trans(char a[100], int l){
int re;
for(int i = 1; i <= l; i++){
int now = int(a[i])-48;
re += now;
re *= 10;
}
return re/10;
}
int main( ){
cin >> n;
while(n > 0){
int num1, num2;
string in;
cin >> in;
if(in[0]=='a'||in[0]=='b'||in[0]=='c'){
mode = in[0];
cin >> num1 >> num2;
}else{
//in(string) -> num1(int)
char cnum[100];
for(int i = 0; i < in.length(); i++){
cnum[i+1] = in[i];
}
num1 = trans(cnum, in.length());
cin >> num2;
}
if(mode == 'a'){
cout << num1 << "+" << num2 << "=" << num1+num2 << endl;
if(n == 1){
cout << len(num1)+len(num2)+len(num1+num2)+2;
return 0;
}
cout << len(num1)+len(num2)+len(num1+num2)+2 << endl;
}
if(mode == 'b'){
if(num1-num2 < 0){
cout << num1 << "-" << num2 << "=" << num1-num2 << endl;
if(n == 1){
cout << len(num1)+len(num2)+len(num2-num1)+3;
return 0;
}
cout << len(num1)+len(num2)+len(num2-num1)+3 << endl;
}else{
cout << num1 << "-" << num2 << "=" << num1-num2 << endl;
if(n == 1){
cout << len(num1)+len(num2)+len(num1-num2)+2;
return 0;
}
cout << len(num1)+len(num2)+len(num1-num2)+2 << endl;
}
}
if(mode == 'c'){
cout << num1 << "*" << num2 << "=" << num1*num2 << endl;
if(n == 1){
cout << len(num1)+len(num2)+len(num1*num2)+2;
return 0;
}
cout << len(num1)+len(num2)+len(num1*num2)+2 << endl;
}
n--;
}//while
return 0;
}
下载的第七个数据:
本地结果:
测评数据: [https://www.luogu.com.cn/record/163756685]()
by suyi1111 @ 2024-07-05 13:05:53
@Sqytih 第19行re没初始化,改了就A了
by suyi1111 @ 2024-07-05 13:06:32
本地可能会自动初始化为0,Linux(洛谷的评测环境)则不会
by Sqytih @ 2024-07-07 09:19:45
@suyihang ooo原来这样 谢谢佬