#include<bits/stdc++.h>
using namespace std;
int i,q[1000],z[1000],sum[1000],changdu=0;//i是循环总数,q,z用于存储当前循环的两个数字,sum是两个数通过运算得到的结果,changdu用于计算q+z=sum这个算式的长度
char x[1000],y[1000];//x用于存储当前的运算符,y是用于判断第一个输出结果是运算符还是数字
string string1[1000],string2[1000],string3[1000];//因为c++中数字没有长度的概念,所以需要用三个字符串分别存储数组长度,以便计算算式的长度“changdu”
int main(void)//多数情况下可以省略void,只是我写习惯了
{
cin>>i;
if(i<=0||i>50)return 0;//根据题意,限制i的范围
for(int j=0;j<i;j++)//第一个循环用于输入数字,不过我现在相通了,洛谷的题不需要把输入和输出分成两个循环写,因为你输入和输出并不在同一个输入框,所以一边输入一边输出也可以正常执行{
cin>>y;//用y来判断是否满足算式符号abc或者数字
if(y[0]>='a'&&y[0]<='z')//如果输入的是运算符就给x赋值{
x[j]=y[0];
cin>>q[j]>>z[j];
}
else//如果输入的是数字就给q赋值,并让这次的运算符与上一次保持一致{
sscanf(y,"%d",&q[j]);
x[j]=x[j-1];
cin>>z[j];
}
if(x[j]=='a')//这个sum[j]完全可以用q[j]+z[j]代替
//例如printf("%d+%d=%d",q[j]+z[j],q[j]+z[j])
;{
sum[j]=q[j]+z[j];
}
else if(x[j]=='b')//减法{
sum[j]=q[j]-z[j];
}
else if(x[j]=='c')//乘法{
sum[j]=q[j]*z[j];
}
else sum[j]=0;
string1[j]=to_string(q[j]);//to_string可以将括号内的数字类型转换成字符串类型
string2[j]=to_string(z[j]);
string3[j]=to_string(sum[j]);
}
for(int c=0;c<i;c++){
//计算changdu
changdu=2+string1[c].size()+string2[c].size()+string3[c].size();
if(x[c]=='a'){
printf("%d+%d=%d\n",q[c],z[c],sum[c]);
cout<<changdu<<endl;
}
if(x[c]=='b'){
printf("%d-%d=%d\n",q[c],z[c],sum[c]);
cout<<changdu<<endl;
}
if(x[c]=='c'){
printf("%d*%d=%d\n",q[c],z[c],sum[c]);
cout<<changdu<<endl;
}
changdu=0;
}
return 0;
}只能说我太菜了,入门题写了这么久,不过通过这题学到了一堆东西。![$[泡泡表情]::(惊哭)](/usr/themes/joe-master/assets/images/owo/paopao/E6838AE593AD_2x.png)
按照输入输出同时进行的逻辑,存储q,z是完全没有必要的,并且printf支持直接计算结果sum,所以没有必要多定义一个数组sum来存储运行结果。如果你有更简单的方法,欢迎留言分享。![$[泡泡表情]::(吐舌)](/usr/themes/joe-master/assets/images/owo/paopao/E59090E8888C_2x.png)
《口算练习题》题目链接:
https://www.luogu.com.cn/problem/P1957
{
cin>>i;
if(i<=0||i>50)return 0;//根据题意,限制i的范围
for(int j=0;j<i;j++)//第一个循环用于输入数字,不过我现在相通了,洛谷的题不需要把输入和输出分成两个循环写,因为你输入和输出并不在同一个输入框,所以一边输入一边输出也可以正常执行{
cin>>y;//用y来判断是否满足算式符号abc或者数字
if(y[0]>='a'&&y[0]<='z')//如果输入的是运算符就给x赋值{
x[j]=y[0];
cin>>q[j]>>z[j];
}
else//如果输入的是数字就给q赋值,并让这次的运算符与上一次保持一致{
sscanf(y,"%d",&q[j]);
x[j]=x[j-1];
cin>>z[j];
}
if(x[j]=='a')//这个sum[j]完全可以用q[j]+z[j]代替
//例如printf("%d+%d=%d",q[j]+z[j],q[j]+z[j])
;{
sum[j]=q[j]+z[j];
}
else if(x[j]=='b')//减法{
sum[j]=q[j]-z[j];
}
else if(x[j]=='c')//乘法{
sum[j]=q[j]*z[j];
}
else sum[j]=0;
string1[j]=to_string(q[j]);//to_string可以将括号内的数字类型转换成字符串类型
string2[j]=to_string(z[j]);
string3[j]=to_string(sum[j]);
}
for(int c=0;c<i;c++){
//计算changdu
changdu=2+string1[c].size()+string2[c].size()+string3[c].size();
if(x[c]=='a'){
printf("%d+%d=%d\n",q[c],z[c],sum[c]);
cout<<changdu<<endl;
}
if(x[c]=='b'){
printf("%d-%d=%d\n",q[c],z[c],sum[c]);
cout<<changdu<<endl;
}
if(x[c]=='c'){
printf("%d*%d=%d\n",q[c],z[c],sum[c]);
cout<<changdu<<endl;
}
changdu=0;
}
return 0;
}
不是学C吗?![$[泡泡表情]::(疑问)](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
@酷侠
我现阶段学的c语言和c++没多大区别,只是写法上略有不同,完全可以同步学习。
@lx5555iou
别把语法弄混了![$[泡泡表情]::(吐舌)](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
@酷侠
谢谢提醒,不过真的没啥区别,只是我现在会习惯性先写c++
@lx5555iou
这里显示你网站最近有访客了,加油![$[经典表情]::(得意)](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)