P1957题解
第一次写题解,也不知道能不能被大家看见,哎,怎么说呢,我也想帮助一下大家,主要是看其他题解都好让新手难懂哦,比如我就感觉好复杂,所以我就想写一个能让新手看懂的代码啦,也算回报一下洛谷吧,哈哈,这个代码真的很好懂,废话不多说,直接上代码
#include
#include
#include
#include <string.h>
#include
#include <math.h>//这么多头文件,不用理,哈哈我是怕洛谷编译器不接受,因为洛谷和VS编译器是不一样的
using namespace std;
int main()
{
int n;
cin >> n;
char x[10000] = {};//整一个数组,方便使用
char t = {};//后面你就会发现这个t很有用啦!
int sum = 0;//定义的时候尽量初始化,好习惯!
int y2 = 1;//这个是用来辅助过度用的,其实不要也可以
for (int i = 1; i <= n; i++)
{
int num4 = 0;//num4用来统计长度哦
int num1 = 1, num2 = 1, num3 = 1;//这三个用来统计每个数字的长度哦!
int y = 0;
int z = 0;
cin >> x;//一次性输入整个数组哦
if (x[0] != ‘a’ && x[0] != ‘b’ && x[0] != ‘c’)//x[0]就是输入的第一位啦,对第一位进行判断咯!
{
for (int j = 0; j < strlen(x); j++)//如果x[0]不是a,b,c的话,就把x数组用数学办法转化成数字咯,很好理解的啦!比如输入了250,那就是2100+510+0*1;
{
y2 = x[j] - ‘0’;
y += y2 * pow(10, strlen(x) - j - 1);//这两步可以省略成一步哦,y+=(x[j]-‘0’)*pow(10,strlen(x)-1-j)
}
x[0] = t;//看到后面你就理解啦!把上次的字母保留到这一次
cin >> z;//再输入z
}//这样就解决了输入两个数据的麻烦啦!!嘻嘻,还不错哦!
else//如果x[0]是字母,那就简单啦;
cin >> y >> z;
if (x[0] == ‘a’)//分类判断咯;
{
sum = y + z;
}
else if (x[0] == ‘b’)
{
sum = y - z;
if (sum < 0)
num4++;//如果结果小于0,会多个负号,所以加个1;
}
else if (x[0] == ‘c’)
{
sum = y * z;
}
t = x[0];//这一步很关键,什么意思呢,为了保留上一次输入的字母,因为下一次可能不输入字母,所以保留一下,方便下次使用
int y1 = y;
int z1 = z;
int sum1 = sum;//这个就是重塑一个数据,防止数据在运算后改变
while (y1 /=10)num1++;
while (z1 /=10)num2++;
while (sum1 /=10)num3++;//这三步就是计算数字的长度咯,比较好理解的咯,分开三个数字进行计位数,很好用哦,学习!
num4 = num4 + num1 + num2 + num3 + 2;//计算长度的思想就是把数字的各长度加起来,再加上符号的长度,就可以啦!
if (x[0] == 'a')
{
cout << y << "+" << z << "=" << sum << endl;
}
else if (x[0] == 'b')
{
cout << y << "-" << z << "=" << sum << endl;
}
else if (x[0] == 'c')
{
cout << y << "*" << z << "=" << sum << endl;//这些就是常规对应咯!
}
cout << num4 << endl;
}
return 0;//输出,结束!嘻嘻,快乐的一天又开始了!(附:ACM比赛里面只要输入和输出对应一样即可,不需要一次性输入或一次性输出哦,可以一边输入一边输出哦
}//这个代码呢比较适合新手理解,避免了多数组的麻烦,适合新手学习!!`**