wow12138 @ 2022-08-08 21:29:07
#include<bits/stdc++.h>
using namespace std;
int sz(string a,int b,int c){//函数作用:将字符串a中第b项到第c项的数转化为int型数据,方便运算。
int d=0;
for(int i=b;i<=c;i++){
d=d*10;
d=d+a[i]-'0';
}
return d;
}
int main(){
int n,flag=1;//n表示n个算式;flag用来表示运算符号,值为1、2、3分别表示加减乘。
cin>>n;
string a[n];//a[i]为记录的字符串。
getline(cin,a[0]);//输入n有回车,需要这行保证真正的a[0]不会读错。
for(int i=0;i<=n-1;i++){
getline(cin,a[i]);
}
for(int i=0;i<=n-1;i++){
if(a[i][0]=='a'){
flag=1;
}
if(a[i][0]=='b'){
flag=2;
}
if(a[i][0]=='c'){
flag=3;
}//查看运算符号。
int d=0,e=0,f,g,h;//d、e用来标记第一个数的开头、结尾在字符串中的位置;
//f、g、h分别记录输入的两个数和结果;
//比如:a 12 13中d、e分别为2(a[2]=1)、3(a[3]=2),f、g、h分别为12、13、25。
for(int j=0;;j++){
if(a[i][j]>='0'&&a[i][j]<='9'){
d=j;
break;
}
}
for(int j=d+1;;j++){
if(a[i][j]==' '){//第一个数结束后下一位必然是' ',借此得出e。
e=j-1;
break;
}
}
f=sz(a[i],d,e);//计算f。
g=sz(a[i],e+2,a[i].size()-1);//第二个数必然始于第一个数结尾后2位,终于字符串末尾。
cout<<f;
if(flag==1){//根据flag输出对应的符号并算出h。
cout<<'+';
h=f+g;
}
if(flag==2){
cout<<'-';
h=f-g;
}
if(flag==3){
cout<<'*';
h=f*g;
}
int x=h,count=0;//x即h,因为h还要输出,值不能变,用x代替进行运算;count计算位数。
if(x<0){//h若是负数,负号占一位。
count++;
}
while(x!=0){//算出h的位数。
x=x/10;
count++;
}
cout<<g<<'='<<h<<endl<<-d+1+a[i].size()+count<<endl;
//总长度=[e-d+1](第一个数)+[(a[i].size-1)-(e+2)+1](第二个数)+[count](第三个数)+2(负号)=上式
}
return 0;}
by wow12138 @ 2022-08-09 23:41:53
@ZQHyyds123 好的,谢谢!