编写一个模拟简单计算器的程序,计算表达式:a op b的值,要求 a、op、b从盘输入。其中a、b(作除数时不能为0)为数值,op为运算符+、-、*、/。本题不考虑非法输入等特殊情况。
输入格式:
输入数据和运算符
输出格式:
输出为实型
输入:
3+5
输出:
8.000000
被除数指的是一个除法运算中被除以的数,也就是被划分或分割的数。
除数指的是一个除法运算中进行除法运算的数,也就是用来划分或分割被除数的数。
例如,在算式“12 ÷ 3 = 4”中,数字12就是被除数,因为它是被3除以的。3就是除数。
很惭愧啊,我连这都分不清。
直接输入a,op和b,然后分类讨论op即可。通过上面思路,得到如下代码。
#include
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
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;
}
输入日期(YYYY-M-D),然后输出它是一年中的第几天。不考虑负数或者其他特殊情况。
输入格式:
输入为整型
输出格式:
输出为整型
输入:
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
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;
}
输入正整数N,判断它是否可被11或13整除,输出YES或者NO。
输入格式:
输入正整数N
输出格式:
输出YES或者NO
输入:
13
输出:
YES
刚看到这个题目的时候,第一反应是,这直接使用 || 就可以解决的问题,为什么是白银的难度。结果,我就按照这个思路一写:
#include
using namespace std;
int main( )
{
int N;
if(N%11==0 || N%13==0){
cout << "YES";
}else{
cout << "NO";
}
return 0;
}
所以我就老老实实的去分析题目了,还是找不到问题在哪,一看代码,我忘写输入了,这题确实不该是白银的难度。尽管这样,我还是大意了,一看到感觉很简单的题目,就有点轻敌了,导致最终打败我的是最简单的输入。所以啊,还是得平等看待一切题目~
虽然题目很简单,但是我还是得记录一下我这个错误。。。以防多次犯同样的错误。
#include
using namespace std;
int main( )
{
int N;
cin >> N;
if(N%11==0 || N%13==0){
cout << "YES";
}else{
cout << "NO";
}
return 0;
}
明天继续吧。