洛谷题解

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比赛里面只要输入和输出对应一样即可,不需要一次性输入或一次性输出哦,可以一边输入一边输出哦

}//这个代码呢比较适合新手理解,避免了多数组的麻烦,适合新手学习!!`**

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值