假期刷题打卡--Day13

1、MT1134简单计算

编写一个模拟简单计算器的程序,计算表达式:a op b的值,要求 a、op、b从盘输入。其中a、b(作除数时不能为0)为数值,op为运算符+、-、*、/。本题不考虑非法输入等特殊情况。

格式

输入格式:

输入数据和运算符

输出格式:

输出为实型

样例 1

输入:

3+5

输出:

8.000000
相关知识点

被除数指的是一个除法运算中被除以的数,也就是被划分或分割的数。

除数指的是一个除法运算中进行除法运算的数,也就是用来划分或分割被除数的数。

例如,在算式“12 ÷ 3 = 4”中,数字12就是被除数,因为它是被3除以的。3就是除数。

很惭愧啊,我连这都分不清。

 

分析过程

直接输入a,op和b,然后分类讨论op即可。通过上面思路,得到如下代码。

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
   int a,b;
   char op;
   cin >> a >> op >> b;
 //  cout << a << op << b << "**";
   if(op == '+'){
      double x = a+b;
      printf("%.6f",x);
   } else
   if(op == '-'){
     double y = a-b;
     printf("%.6f",y);
   }else
   if(op == '*'){
     double z = a*b;
     printf("%.6f",z);
   }else
   if(op == '/'){
     if(b==0){
        cout << "None";
     }
     double q = a/b;
     printf("%.6f",q);
   }
    return 0;
}

我以为会是这样,但是发现,还有一个测试用例过不去。最后通过检查发现,在定义变量的时候定义成了整型,这里应该使用浮点型,浮点型的精度可以精确到小数点后的位置,而整型不可以。所以修改为浮点型就可以了。

 实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
   double a,b;
   char op;
   cin >> a >> op >> b;
   if(op == '+'){
      double x = a+b;
      printf("%.6f",x);
   } else
   if(op == '-'){
     double y = a-b;
     printf("%.6f",y);
   }else
   if(op == '*'){
     double z = a*b;
     printf("%.6f",z);
   }else
   if(op == '/'){
     if(b==0){
        cout << "None";
     }
     double q = a/b;
     printf("%.6f",q);
   }
    return 0;
}

 

2、MT1138第几天

输入日期(YYYY-M-D),然后输出它是一年中的第几天。不考虑负数或者其他特殊情况。

格式

输入格式:

输入为整型

输出格式:

输出为整型

样例 1

输入:

2013-6-17

输出:

168
相关知识点

闰年:
判断方法(1):year能够被4整除,但是不能被100整除,则year是闰年。
判断方法(2):如果year能够被400整除,则year是闰年。

平年2月28天,闰年2月29天。

 解决思路

        首先定义一个数组,用来存储一年中月份的总数,然后再判断输入的年份是否为特殊年份(即判断是否是闰年),如果是闰年的话,就需要将2月的总天数变为29,然后先利用输入的月份先计算整月的天数,再加上额外的天数day;若不是闰年,则直接计算整月的天数+输入中额外天数day。

        在解决此题时要注意,i应该设置从1开始,因为按照现实情况没有0月,而数组下标默认从0开始,所以在前面定义数组的时候,定义第一个数组元素为0,第二个元素才为一月的天数。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main(){   
    int year,month,day,sum=0;
    scanf("%d-%d-%d",&year,&month,&day);
    int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//   平年2月28天,闰年2月29天。
// (1)year能够被4整除,但是不能被100整除,则year是闰年。
// (2)如果year能够被400整除,则year是闰年。
    if((year%4==0 && year%100!=0 )|| year%400==0){
        days[2] = 29;
    }
    for(int i = 1;i < month;i++){
        sum += days[i];
    }
    sum = sum + day;
    cout << sum;
    return 0;
}

3、MT113911或13

输入正整数N,判断它是否可被11或13整除,输出YES或者NO。

格式

输入格式:

输入正整数N

输出格式:

输出YES或者NO

样例 1

输入:

13

输出:

YES
分析过程

刚看到这个题目的时候,第一反应是,这直接使用 || 就可以解决的问题,为什么是白银的难度。结果,我就按照这个思路一写:

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int N;
    if(N%11==0 || N%13==0){
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
}

 发现只通过一个用例:

 所以我就老老实实的去分析题目了,还是找不到问题在哪,一看代码,我忘写输入了,这题确实不该是白银的难度。尽管这样,我还是大意了,一看到感觉很简单的题目,就有点轻敌了,导致最终打败我的是最简单的输入。所以啊,还是得平等看待一切题目~

虽然题目很简单,但是我还是得记录一下我这个错误。。。以防多次犯同样的错误。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int N;
    cin >> N;
    if(N%11==0 || N%13==0){
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
}

明天继续吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值