废话,,我是一句都无
直接上代码!!!
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
char fuhao[50][100];
int arr[50][2]={0};
int i;
for(i=0;i<n;i++)
{
scanf("%s",&fuhao[i][0]);
if(fuhao[i][0]<'a'||fuhao[i][0]>'c')
{
int j=0;
while(fuhao[i][j]!='\0')
{
arr[i][0]=arr[i][0]*10+(fuhao[i][j]-'0');
j++;
}
scanf("%d",&arr[i][1]);
fuhao[i][0]=fuhao[i-1][0];
}
else
{
scanf("%d %d",&arr[i][0],&arr[i][1]);
}
}
for(i=0;i<n;i++)
{
int count=2;
if(arr[i][0]==0)
{
count++;
}
if(arr[i][1]==0)
{
count++;
}
if(fuhao[i][0]=='a')
{
int he=arr[i][0]+arr[i][1];
printf("%d+%d=%d\n",arr[i][0],arr[i][1],he);
while(arr[i][0])
{
arr[i][0]/=10;
count++;
}
while(arr[i][1])
{
arr[i][1]/=10;
count++;
}
if(he==0)
{
he++;
}
while(he)
{
he/=10;
count++;
}
printf("%d\n",count);
}
else if(fuhao[i][0]=='b')
{
int cha=arr[i][0]-arr[i][1];
printf("%d-%d=%d\n",arr[i][0],arr[i][1],cha);
while(arr[i][0])
{
arr[i][0]/=10;
count++;
}
while(arr[i][1])
{
arr[i][1]/=10;
count++;
}
if(cha<=0)
{
count++;
}
while(cha)
{
cha/=10;
count++;
}
printf("%d\n",count);
}
else if(fuhao[i][0]=='c')
{
int ji=arr[i][0]*arr[i][1];
printf("%d*%d=%d\n",arr[i][0],arr[i][1],ji);
while(arr[i][0])
{
arr[i][0]/=10;
count++;
}
while(arr[i][1])
{
arr[i][1]/=10;
count++;
}
if(ji==0)
{
count++;
}
while(ji)
{
ji/=10;
count++;
}
printf("%d\n",count);
}
}
return 0;
}
接受自己是小白(的平庸),才有更好的未来!
先总说下,代码肯定不是最优的,我自己都觉得有即个地方可以改的更好,包含以下几点:
- 输入阶段感觉有更好的写法,但我没想到,感觉有。
- 数数阶段应该写一个函数,可以节省空间,也可以增加可读性。
- 数数阶段可以将得到的结果整体放入一个字符串中,用strlen函数计数。
- 要学习些英语单词了,不能再用拼音辽QAQ。
整体思路就是,先一步一步的向下写,不要管怎么让程序有记忆(这个条件“若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。”),那么就很好写了
首先,输入数据,就是我的代码在输入阶段不要加if判断。
然后,对输入的数据进行处理,就是用if语句判断'a' 'b' 'c',依次计算并输出。
最后,对程序记忆的处理(详情见下方代码)。
int i;
for(i=0;i<n;i++)
{
scanf("%s",&fuhao[i][0]);
if(fuhao[i][0]<'a'||fuhao[i][0]>'c')
{
int j=0;
while(fuhao[i][j]!='\0')
{
arr[i][0]=arr[i][0]*10+(fuhao[i][j]-'0');
j++;
}
scanf("%d",&arr[i][1]);
fuhao[i][0]=fuhao[i-1][0];
}
else
{
scanf("%d %d",&arr[i][0],&arr[i][1]);
}
}
用if将正常输入分开,由于scanf遇到空格就会停止,所以只需处理第一个数据的输入即可。
具体操作见上。
为131行代码撒花!!!