样例:
4
a 64 46
275 125
c 11 99
b 46 64
程序输出:
64+46=110
9
2702+125=2827
13
11*99=1089
10
46-64=-18
9
好端端的 275 咋就成了 2702 了呢? 代码献上:
#include <iostream>
#include <cstdio>
using namespace std;
struct yunsuan
{
string yunsuanfu; // 运算符,第一个输入的数字
int d2,d3; // 第二个和第三个输入的运算数字
};
int main()
{
/* 定义部分 */
int n; // n 行
yunsuan ys[55]; // 定义 yunsuan 结构体输入 ys
int jieguo; // 运算结果
int b=0; // 计数器 ,字符数
/* 输入部分 */
cin>>n; // 输入 n
for(int i=0; i<n; i++) // 输入 n 行部分
{
cin>>ys[i].yunsuanfu>>ys[i].d2; // 输入 ys[i].yunsuanfu 和 ys[i].d2
if(getchar()=='\n') // 如果换行了
{
ys[i].d3=ys[i].d2; // 将 ys[i].d3 赋值为 ys[i].d2
ys[i].d2=0; // 将 ys[i].d2 清零,不影响 for 内部乘 10
for(int k=0; k<sizeof(ys[i].yunsuanfu); k++)
{
ys[i].d2*=10;
ys[i].d2+=ys[i].yunsuanfu[k]-48;
} // 将 ys[i].d2 赋值为 ys[i].yunsuanfu 的数字
ys[i].yunsuanfu=ys[i-1].yunsuanfu;
continue; // 跳出本次循环
}
cin>>ys[i].d3; // 否则,输入 ys[i].d3
}
/* 输出部分 */
for(int i=0; i<n; i++)
{
b=2; // + 和 = 用的空间
cout<<ys[i].d2; // 第一个运算数字
switch(ys[i].yunsuanfu[0])
{
case 'a':cout<<'+';jieguo=ys[i].d2+ys[i].d3;break;
case 'b':cout<<'-';jieguo=ys[i].d2-ys[i].d3;break;
case 'c':cout<<'*';jieguo=ys[i].d2*ys[i].d3;break;
} // 运算符,结果
cout<<ys[i].d3; // 第二个运算数字
cout<<'='; // =号
cout<<jieguo<<endl; // 结果,换行
do
{
ys[i].d2/=10;
b++;
}while(ys[i].d2!=0); // 第一个运算数字用的空间
do
{
ys[i].d3/=10;
b++;
}while(ys[i].d3!=0); // 第二个运算数字用的空间
if(jieguo<0) // 如果结果小于0
b++; // 一定有 - 号
do
{
jieguo/=10;
b++;
}while(jieguo!=0); // 结果用的空间
cout<<b<<endl; // 输出字符数
}
return 0;
}
感觉问题是在
for(int k=0; k<sizeof(ys[i].yunsuanfu); k++)
{
ys[i].d2*=10;
ys[i].d2+=ys[i].yunsuanfu[k]-48;
} // 将 ys[i].d2 赋值为 ys[i].yunsuanfu 的数字
看了好长时间死活看不出来(可能是我太菜了...) 有木有能看出来的大佬,help!