Lolaandd @ 2023-11-22 19:26:12
#include<stdio.h>
int len(int a)
{
int len=0;
if(a==0)
{
len=1;
return len;
}
if(a<0)
{
len++;
a=-a;
}
while(a>0)
{
a/=10;
len++;
}
return len;
}
int main()
{
int n;
scanf("%d",&n);
getchar();
char str[50];
char l;
for (int i=0;i<n;i++)
{
int temp[2]={0};
scanf("%c",&str[i]);
switch (str[i])
{
case 'a':l=str[i];
scanf("%d %d",&temp[0],&temp[1]);
printf("%d+%d=%d\n",temp[0],temp[1],temp[0]+temp[1]);
break;
case 'b':l=str[i];
scanf("%d %d",&temp[0],&temp[1]);
printf("%d-%d=%d\n",temp[0],temp[1],temp[0]-temp[1]);
break;
case 'c':l=str[i];
scanf("%d %d",&temp[0],&temp[1]);
printf("%d*%d=%d\n",temp[0],temp[1],temp[0]*temp[1]);
break;
default :
scanf("%d %d",&temp[0],&temp[1]);
if(l=='+') printf("%d+%d=%d\n",temp[0],temp[1],temp[0]+temp[1]);
if(l=='-') printf("%d-%d=%d\n",temp[0],temp[1],temp[0]-temp[1]);
if(l=='*') printf("%d*%d=%d\n",temp[0],temp[1],temp[0]*temp[1]);
break;
}
printf("%d\n",len(temp[0])+len(temp[1])+len(temp[0]+temp[1])+2);
}
return 0;
}
by milk2715093695 @ 2023-11-22 23:02:52
你这个样例好像也没过啊
if(l=='+')
printf("%d+%d=%d\n",temp[0],temp[1],temp[0]+temp[1]);
if(l=='-')
printf("%d-%d=%d\n",temp[0],temp[1],temp[0]-temp[1]);
if(l=='*')
printf("%d*%d=%d\n",temp[0],temp[1],temp[0]*temp[1]);
这里你判断l是否等于+ - *
但是你在这之前l只可能等于a b c
啊。
而且感觉代码逻辑也有问题:假设你已经修复了上述问题,使用数据
4
a 64 46
275 125
c 11 99
b 46 64
的时候处理完第三行数据之后l是'c',scanf下一个读到的是第三行末尾的'\r'或者'\n',然后又进defaute了,那d根本就拿不到。
如果这些问题都修复了,还是有一点小问题:
这组数据其实不是4\na 64 46\n275 125\nc 11 99\nb 46 64
,而是4\r\na 64 46\r\n275 125\r\nc 11 99\r\nb 46 64
,具体可以看https://www.luogu.com.cn/discuss/735482