igopor @ 2024-11-18 17:00:21
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int len(int a);
char p;//记录运算符
int main()
{
int i;
cin>>i;
int j;
string z;
int a,b,c; //仨数字
for(j=0;j<i;j++){
getline(cin,z);
if(z[z.size()-1]=='\n'){
z.resize(z.size()-1);//移除换行符
}
if(z.size()==3){
p=z[0];
a=z[1]-'0';
b=z[2]-'0';
}
else{
a=z[0]-'0';
b=z[1]-'0';
}
if(p=='a'){
c=a+b;
cout<<a<<"+"<<b<<"="<<c;
cout<<"\n"<<len(a)+len(b)+len(c)+2<<"\n";
}
if(p=='b'){
c=a-b;
cout<<a<<"-"<<b<<"="<<c;
cout<<"\n"<<len(a)+len(b)+len(c)+2<<"\n";
}
if(p=='c'){
c=a*b;
cout<<a<<"*"<<b<<"="<<c;
cout<<"\n"<<len(a)+len(b)+len(c)+2<<"\n";
}
}
return 0;
}
int len(int a){//求数字占位
int le=0;
if(a<=0){
le++;
a=-a;
}
while(a>0){
le++;
a=a/10;
}
return le;
}
by queenbee @ 2024-11-18 17:19:28
@igopor
建议重构代码
1、你getline直接给一行全输入进去了,你输进去的是一整行的字符串
2、字符串s-'0'不是对应的int的值,必须s[i]-'0'是这一位对应int的值
3、……
反正就是一堆错,不想说了,自己看看题解学学入门算法吧
by igopor @ 2024-11-18 17:50:34
@queenbee 好的谢谢佬!
(写着写着把py列表和这里的字符串弄混了呃啊啊啊确实一堆错。。。。。
灰溜溜回去写了...oTATo
by Flora_liu @ 2024-11-27 21:13:34
@igopor 这段代码中存在几个问题,主要集中在处理输入和输出格式,以及变量使用上。以下是详细的问题分析和修正建议:
输入处理: 当使用 getline(cin, z) 后,如果输入行以换行符结束,z[z.size()-1] 已经是字符串的末尾的空字符 '\0' 而不是换行符 '\n'。换行符在 getline 中已经被去除。因此,检查并移除换行符的代码是多余的。 当输入只有两个数字时,程序没有正确处理运算类型 p,因为它依赖于前一个输入行的运算类型。如果第一行输入就是两个数字,那么 p 将是未初始化的,导致未定义行为。 输出格式: 输出格式要求输出算式及其长度,但代码中 len 函数计算的是数字的位数,而不是整个算式的长度。算式的长度应包括运算符、数字、等号以及可能的空格和符号。 代码风格和效率: 使用 #include <bits/stdc++.h> 是不推荐的,因为它包含了大量不必要的头文件,可能影响编译效率。 使用 using namespace std; 可能会导致命名冲突。 边界条件: 当输入的数字为 0 或负数时,虽然题目指定非负整数,但代码中对负数的处理(如增加长度)应被移除或确认输入有效性。 下面是修正后的代码:
cpp
#include <iostream>
#include <string>
using namespace std;
int len(int a) {
// 转换为字符串计算长度,考虑正负号
string s = to_string(a);
return s.length();
}
int main() {
int i;
cin >> i;
cin.ignore(); // 忽略第一行输入后的换行符
char p = ' '; // 初始化运算符
for (int j = 0; j < i; j++) {
string z;
getline(cin, z);
int a, b;
char op;
if (z.size() == 3) {
op = z[0];
a = z[1] - '0';
b = z[2] - '0';
} else if (z.size() == 2) {
a = z[0] - '0';
b = z[1] - '0';
op = p; // 使用前一个运算符
} else {
cerr << "Invalid input format" << endl;
return 1; // 退出程序
}
int c;
string result;
if (op == 'a') {
c = a + b;
result = to_string(a) + "+" + to_string(b) + "=" + to_string(c);
} else if (op == 'b') {
c = a - b;
result = to_string(a) + "-" + to_string(b) + "=" + to_string(c);
} else if (op == 'c') {
c = a * b;
result = to_string(a) + "*" + to_string(b) + "=" + to_string(c);
}
cout << result << endl;
cout << result.length() << endl;
p = op; // 更新运算符
}
return 0;
}
这个修正版本解决了输入处理的问题,正确计算了算式的长度,并处理了可能的输入格式错误。
by Yuhaochen666 @ 2024-12-04 20:17:32
正确代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a;
int n,x,b1=0,b2=0,b3=0,d,j,cnt=0;
cin>>n;
for(int i=0;i<=n;i++)
{
getline(cin,a);
d=a.size();
if(a[0]=='a')
{
x=1;
for(j=2;j<d;j++)
{
if(a[j]!=' ')
{
b1*=10;
b1+=(a[j]-'0');
}
else
{
break;
}
}
j++;
for(;j<d;j++)
{
if(a[j]!=' ')
{
b2*=10;
b2+=(a[j]-'0');
}
}
b3=b1+b2;
cout<<b1<<"+"<<b2<<"="<<b3<<endl;
for(;b3>0;b3/=10)
{
cnt++;
}
if(cnt==0)
{
cnt=1;
}
cout<<(d-1+cnt)<<endl;
cnt=0;
b1=0;
b2=0;
}
else if(a[0]=='b')
{
x=2;
for(j=2;j<d;j++)
{
if(a[j]!=' ')
{
b1*=10;
b1+=(a[j]-'0');
}
else
{
break;
}
}
j++;
for(;j<d;j++)
{
if(a[j]!=' ')
{
b2*=10;
b2+=(a[j]-'0');
}
}
b3=b1-b2;
cout<<b1<<"-"<<b2<<"="<<b3<<endl;
if(b3<0)
{
cnt++;
b3*=-1;
}
for(;b3>0;b3/=10)
{
cnt++;
}
if(cnt==0)
{
cnt=1;
}
cout<<(d-1+cnt)<<endl;
cnt=0;
b1=0;
b2=0;
}
else if(a[0]=='c')
{
x=3;
for(j=2;j<d;j++)
{
if(a[j]!=' ')
{
b1*=10;
b1+=(a[j]-'0');
}
else
{
break;
}
}
j++;
for(;j<d;j++)
{
if(a[j]!=' ')
{
b2*=10;
b2+=(a[j]-'0');
}
}
b3=b1*b2;
cout<<b1<<"*"<<b2<<"="<<b3<<endl;
for(;b3>0;b3/=10)
{
cnt++;
}
if(cnt==0)
{
cnt=1;
}
cout<<(d-1+cnt)<<endl;
cnt=0;
b1=0;
b2=0;
}
else
{
if(x==1)
{
for(j=0;j<d;j++)
{
if(a[j]!=' ')
{
b1*=10;
b1+=(a[j]-'0');
}
else
{
break;
}
}
j++;
for(;j<d;j++)
{
if(a[j]!=' ')
{
b2*=10;
b2+=(a[j]-'0');
}
}
b3=b1+b2;
cout<<b1<<"+"<<b2<<"="<<b3<<endl;
for(;b3>0;b3/=10)
{
cnt++;
}
if(cnt==0)
{
cnt=1;
}
cout<<(d+1+cnt)<<endl;
cnt=0;
b1=0;
b2=0;
}
if(x==2)
{
for(j=0;j<d;j++)
{
if(a[j]!=' ')
{
b1*=10;
b1+=(a[j]-'0');
}
else
{
break;
}
}
j++;
for(;j<d;j++)
{
if(a[j]!=' ')
{
b2*=10;
b2+=(a[j]-'0');
}
}
b3=b1-b2;
cout<<b1<<"-"<<b2<<"="<<b3<<endl;
if(b3<0)
{
cnt++;
b3*=-1;
}
for(;b3>0;b3/=10)
{
cnt++;
}
if(cnt==0)
{
cnt=1;
}
cout<<(d+1+cnt)<<endl;
cnt=0;
b1=0;
b2=0;
}
if(x==3)
{
for(j=0;j<d;j++)
{
if(a[j]!=' ')
{
b1*=10;
b1+=(a[j]-'0');
}
else
{
break;
}
}
j++;
for(;j<d;j++)
{
if(a[j]!=' ')
{
b2*=10;
b2+=(a[j]-'0');
}
}
b3=b1*b2;
cout<<b1<<"*"<<b2<<"="<<b3<<endl;
for(;b3>0;b3/=10)
{
cnt++;
}
if(cnt==0)
{
cnt=1;
}
cout<<(d+1+cnt)<<endl;
cnt=0;
b1=0;
b2=0;
}
}
}
return 0;
}