无法用c ++计算总数

时间:2014-05-11 04:41:53

标签: c++ math text-files

我不能为我的生活弄清楚如何计算我的程序的某个部分。我只是需要一些帮助来了解如何获得正确的总数。

在档案

111111 M 303-333-3333 333 550 0.9 720-777-7777 501 444 0.4

222222 U 303-444-5555 555 55 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

我只需要提供帮助,主要是第1和第3个帐户存档。 到目前为止,我所拥有的只是(中期和高级计划费用)..

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 个答案:

答案 0 :(得分:1)

(1)不确定你是否被告知要使用花车,但由于内部四舍五入,他们很难用钱。你最好使用一个整数并以便士工作,然后在必要时除以并乘以100 - 通常当你需要打印数值时。

(2)我只是把你的中档作为一个例子,它似乎有用,如果没有,它应该足够接近让你纠正。

(3)你坚持使用的两个(1&amp; 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);
}

输出:总计= 118.482