题目传送门OvO
题目描述
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
输入输出格式
输入格式:
输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。
输出格式:
输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。
小玉系列题目。
这题偷偷地告诉你们:
可以四舍五入!
\texttt{可以四舍五入!}
可以四舍五入!
#include <iostream>
using namespace std;
int main(){
int a=0;
double b=0;//双精度小数型
cin>>a;
if(a<=150){//判断小于等于150
b = a*0.4463;
}else if(a>=151&&a<=400){//大于150小于等于400
b += 150*0.4463;
b += (a-150)*0.4663;
}else{//不是前两种一定就是大于400
b += 150*0.4463;
b += (400-150)*0.4663;
b += (a-400)*0.5663;
}
b=int((b*10)+0.5)/10.0;//四舍五入到小数点后一位,恩,这才是要说的
/* +0.5的话,如果大于等于0.5就往前进一位,小于0.5就不往前进,然后强制转换到int会向下取整,正好四舍五入到整数,这是一种我认为最简单的四舍五入方法。
如果需要四舍五入到某一位,那么就*多少多少然后再除就好了
比如小数点后一位就*10/10.0
后两位*100/100.0
跟一个.0代表是浮点运算恩,这样就不会除完是int了
*/
cout<<b;
}
Pascal的:
program ye;
var
n:longint;
s:real;
begin
read(n);//输入小玉的月用电量
if n<=150 then//if 在第一梯度 then 电费=第一梯度单位电费*用电量
s:=0.4463*n
else
if n<=400 then//if 在第二梯度 then 电费=第二梯度部分用电*第二梯度部分单位电费+在第一梯度用电*第一梯度单位电费
s:=(n-150)*0.4663+150*0.4463
else
s:=(n-400)*0.5663+?????????; //问号处根据前面的代码自己思考
write(s:0:1);//输出电费并保留1位小数
end.
Java的:
import java.util.Scanner;
import java.text.DecimalFormat;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
double ans = 0;
int n = sc.nextInt();
if (n <= 150)
ans += n * 0.4463;
else
{
n -= 150;
ans += 150 * 0.4463;
if (n <= 250)
ans += n * 0.4663;
else
{
n -= 250;
ans += 250 * 0.4663;
ans += n * 0.5663;
}
}
DecimalFormat df = new DecimalFormat(".0");
System.out.println(df.format(ans));
}
}
Python的:
s = int(input())
if s > 400:
print('%.1f' % ((s - 400) * 0.5663 + 250 * 0.4663 + 150 * 0.4463))
elif s > 150:
print('%.1f' % ((s - 150) * 0.4663 + 150 * 0.4463))
else:
print('%.1f' % (s * 0.4463))