不能在c++中计算总数

Cannot calculate totals in c++

本文关键字:计算 c++ 不能      更新时间:2023-10-16

我一辈子也弄不清楚如何计算程序的某一部分。我只是需要一些帮助,告诉你如何得出正确的总数。

在文件

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