L2022211395 @ 2022-12-16 01:03:19
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int change(char str[],int a,int b);//将字符转化成整数
int len(int num);//计算数字长度
int main()
{
int n;//输入n组数
int i=1;
int y=0;
int a;
int b;
int result;
int num1;
int num2;
int l=0;
char ch;
scanf("%d",&n);
getchar();
char str[100];
for(i=1;i<=n;i++)
{
gets(str);//每次读入一个字符串
if(str[0]>='a'&&str[0]<='c')//判断首个字符是否为字母
{
ch=str[0];//存下上一次的字母,以便下次使用
if(str[0]=='a')
{
a=2;
for(y=2;str[y]!=' ';y++)
{
b=y;
}
l=b-a+1;
num1=change(str,a,b);//a,b分别为数字的起始位置
a=b+2;
for(y=b+2;str[y]!='\0';y++)
{
b=y;
}
l=l+b-a+1;
num2=change(str,a,b);
result=num1+num2;
l=l+len(result);
l=l+2;//l为总长度
printf("%d+%d=%d\n",num1,num2,result);
printf("%d",l);
}
if(str[0]=='b')
{
a=2;
for(y=2;str[y]!=' ';y++)
{
b=y;
}
l=b-a+1;
num1=change(str,a,b);
a=b+2;
for(y=b+2;str[y]!='\0';y++)
{
b=y;
}
l=l+b-a+1;
num2=change(str,a,b);
result=num1-num2;
l=l+len(result);
if(result>=0)
{
l=l+2;
}
else
l=l+3;
printf("%d-%d=%d\n",num1,num2,result);
printf("%d",l);
}
if(str[0]=='c')
{
a=2;
for(y=2;str[y]!=' ';y++)
{
b=y;
}
l=b-a+1;
num1=change(str,a,b);
a=b+2;
for(y=b+2;str[y]!='\0';y++)
{
b=y;
}
l=l+b-a+1;
num2=change(str,a,b);
result=num1*num2;
l=l+len(result);
l=l+2;
printf("%d*%d=%d\n",num1,num2,result);
printf("%d",l);
}
}
else
{
a=0;
for(y=0;str[y]!=' ';y++)
{
b=y;
}
l=b-a+1;
num1=change(str,a,b);
a=b+2;
for(y=b+2;str[y]!='\0';y++)
{
b=y;
}
l=l+b-a+1;
num2=change(str,a,b);
if(ch=='a')//ch为上一次输入的运算方式
{
result=num1+num2;
l=l+len(result);
l=l+2;
printf("%d+%d=%d\n",num1,num2,result);
printf("%d",l);
}
if(ch=='b')
{
result=num1-num2;
l=l+len(result);
if(result>=0)
{
l=l+2;
}
else
l=l+3;
printf("%d-%d=%d\n",num1,num2,result);
printf("%d",l);
}
if(ch=='c')
{
result=num1*num2;
l=l+len(result);
l=l+2;
printf("%d*%d=%d\n",num1,num2,result);
printf("%d",l);
}
}
if(i!=n)
{
printf("\n");
}
}
return 0;
}
int change(char str[],int a,int b)
{
int i=b;
int count=1;
int num=0;
while(i>=a)
{
num=num+(str[i]-'0')*count;
count=count*10;
i--;
}
return num;
}
int len(int num)
{
int l=0;
if(num==0)
l=1;
else
{
while(num!=0)
{
num=num/10;
l++;
}
}
return l;
}
by AToj123 @ 2022-12-16 04:27:03
在 main 函数里定义变量,有的编译器会随机赋初始值,你本地估计初始化了
把定义丢到主函数上面试试?
by AToj123 @ 2022-12-16 04:28:47
(但是这个年代还有人用 C 语言?
(无恶意,表示惊讶)
by Eleveslaine @ 2022-12-16 07:31:25
这代码好长啊
sscanf是个好东西
by ZQIN_P @ 2022-12-16 07:40:54
c++有sscanf吗?
by REMAC @ 2022-12-16 08:12:57
@planet_over_for_ever 显然是有的,我有一年cspj最后一题那个IP地址的,就是sscanf。
大部分c函数cpp都是支持的。
by ZQIN_P @ 2022-12-16 08:15:24
@REMAC 好的,感谢