不能在c++中计算总数
Cannot calculate totals in c++
我一辈子也弄不清楚如何计算程序的某一部分。我只是需要一些帮助,告诉你如何得出正确的总数。
在文件111111 M 303-333-3333 333 550 0.9 720-777-7777 501 444 0.4
222222 U 303-444-5555 5555 3.3
333333 H 720-888-9999 1888 888 3.3 720-999-1111 999 1050 1.8 720-222-2222 800 800 2.1
444444 L 720-123-4567 88 10 0
每部手机的话费(定义见下文)
州和地方税8.1%的电话费税注:8.1%存储为0.081
每台电话$ 1.44普遍服务费用
L = Low usage plan (no minutes included)
M = Mid usage plan (500 talk minutes and 500 texts included)
H = High usage plan (1000 talk minutes and 1000 texts and 2 GB data included)
U = Unlimited plan
Phone charges are as follows for each plan:
Plan Base Fee Charge for minutes Charge for texts Charge for data
L* 4.99 0.10 per minute 0.10 per text Data not available
M 49.99 0.08 per minute over 500 0.08 per text over 500 $2.88 per 500 MB over 500 MB
H 74.99 0.07 per minute over 1000 0.07 per text over 1000 $1.78 per 500 MB over 2 GB
U 99.99 No charge No charge No charge
我需要通过计算得到这些结果
111111 Mid usage 2 $ 118.48
222222 Unlimited 1 $ 109.53
333333 High usage 3 $ 326.19
444444 Low usage 1 $ 17.43
月合计$ 571.63
我只是需要帮助,主要是第一个和第三个账户的文件。到目前为止,我所有的是这个(中高计划费用)…
float midPlanCharge (int& min, int& texts, float& data)
{
float total;
// double check!!!!!!!!!!!!!!!!!!!
if ( min <= BASE_MID_MIN && texts <= BASE_MID_TEXT && data <= BASE_MID_DATA )
{
total = MID_FEE;
}
else if ( min > BASE_MID_MIN && texts <= BASE_MID_TEXT && data <= BASE_MID_DATA )
{
total = MID_FEE + ( (min - BASE_MID_MIN) * MID_MIN );
}
else if ( min <= BASE_MID_MIN && texts > BASE_MID_TEXT && data <= BASE_MID_DATA )
{
total = MID_FEE + ( ( texts - BASE_MID_TEXT) * MID_TEXT);
}
else if ( min <= BASE_MID_MIN && texts <= BASE_MID_TEXT && data > BASE_MID_DATA )
{
total = MID_FEE + ( (( data - BASE_MID_DATA) * 1000 ) * MID_DATA);
}
else if ( min > BASE_MID_MIN && texts <= BASE_MID_TEXT && data > BASE_MID_DATA )
{
total = MID_FEE + (( min - BASE_MID_MIN) * MID_MIN) + ( (( data - BASE_MID_DATA)*1000) * MID_DATA);
}
else if ( min > BASE_MID_MIN && texts > BASE_MID_TEXT && data <= BASE_MID_DATA )
{
total = MID_FEE + ((min - BASE_MID_MIN) * MID_MIN) + (( texts - BASE_MID_TEXT) * MID_TEXT);
}
else if ( min <= BASE_MID_MIN && texts > BASE_MID_TEXT && data > BASE_MID_DATA )
{
total = MID_FEE + ((texts - BASE_MID_TEXT) * MID_TEXT) + (((data - BASE_MID_DATA)*1000) * MID_DATA);
}
else {
total = MID_FEE + ((min - BASE_MID_MIN) * MID_MIN) + ((texts - BASE_MID_TEXT) * MID_TEXT) + (((data - BASE_MID_DATA)*1000) * MID_DATA);
}
return total;
}
float highPlanCharge (int& min, int& texts, float& data)
{
float total;
if ( min <= BASE_HIGH_MIN && texts <= BASE_HIGH_TEXT && data <= BASE_HIGH_DATA )
{
total = HIGH_FEE;
}
else if ( min > BASE_HIGH_MIN && texts <= BASE_HIGH_TEXT && data <= BASE_HIGH_DATA )
{
total = HIGH_FEE + ( (min - BASE_HIGH_MIN) * HIGH_MIN );
}
else if ( min <= BASE_HIGH_MIN && texts > BASE_HIGH_TEXT && data <= BASE_HIGH_DATA )
{
total = HIGH_FEE + ( ( texts - BASE_HIGH_TEXT) * HIGH_TEXT);
}
else if ( min <= BASE_HIGH_MIN && texts <= BASE_HIGH_TEXT && data > BASE_HIGH_DATA )
{
total = HIGH_FEE + ((( data - BASE_HIGH_DATA) * 1000) * HIGH_DATA);
}
else if ( min > BASE_HIGH_MIN && texts <= BASE_HIGH_TEXT && data > BASE_HIGH_DATA )
{
total = HIGH_FEE + (( min - BASE_HIGH_MIN) * HIGH_MIN) + ((( data - BASE_HIGH_DATA)*1000) * HIGH_DATA);
}
else if ( min > BASE_HIGH_MIN && texts > BASE_HIGH_TEXT && data <= BASE_HIGH_DATA )
{
total = HIGH_FEE + ((min - BASE_HIGH_MIN) * HIGH_MIN) + (( texts - BASE_HIGH_TEXT) * HIGH_TEXT);
}
else if ( min <= BASE_HIGH_MIN && texts > BASE_HIGH_TEXT && data > BASE_HIGH_DATA )
{
total = HIGH_FEE + ((texts - BASE_HIGH_TEXT) * HIGH_TEXT) + (((data - BASE_HIGH_DATA)*1000) * HIGH_DATA);
}
else {
total = HIGH_FEE + ((min - BASE_HIGH_MIN) * HIGH_MIN) + ((texts - BASE_HIGH_TEXT) * HIGH_TEXT) + (((data - BASE_HIGH_DATA)*1000) * HIGH_DATA);
}
return total;
}
(1)不确定你是否被告知要使用浮点数,但由于内部舍入,使用浮点数是一种痛苦。你最好使用整数,并且在需要的时候(通常是在需要打印值的时候)用100除以或乘以100。
(2)我只是做了你的中程作为一个例子,它似乎是有效的,如果不是,它应该足够接近你纠正。
(3)你被粘在(1 &3)有多部手机,所以你可能在一开始就在分析。我只是在这里模拟一下。这不会让你免费回家,但希望能减少困惑——其中一些似乎是你自己造成的。
#include <iostream>
#include <cmath>
using namespace std;
const float SERVICE_FEE = 1.44;
const float MID_FEE = 49.99;
const int BASE_MID_MIN = 500;
const float MID_MIN = 0.08;
const int BASE_MID_TEXT = 500;
const float MID_TEXT = 0.08;
const int BASE_MID_DATA = 500;
const float MID_DATA = 2.88;
float midPlanCharge (int min, int texts, float data)
{
float total = MID_FEE;
data *= 1000;
if (min > BASE_MID_MIN)
total += (min - BASE_MID_MIN) * MID_MIN;
if (texts > BASE_MID_TEXT)
total += (texts - BASE_MID_TEXT) * MID_TEXT;
if (data > BASE_MID_DATA)
total += roundf((data - BASE_MID_DATA) / BASE_MID_DATA) * MID_DATA;
return total;
}
int main(int argc, char *argv[])
{
float accTotal = 0.0;
accTotal += midPlanCharge(333, 550, 0.9);
accTotal += midPlanCharge(501, 444, 0.4);
accTotal += (accTotal * 0.081); //tax
accTotal += SERVICE_FEE * 2; //service fee on 2 phones
cout << "Total = " << accTotal << endl;
return(0);
}
输出:Total = 118.482
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- 如何计算多映射中重复对的数量