注册 登录
编程论坛 C++教室

求助 :关于Liang《c++程序设计》中一个课后习题的问题

p832lun 发布于 2013-11-17 14:12, 422 次点击
题目是计算给定金额的货币数量,比如$11.56处理后为11个一美元,2个25美分,和1个十美分还有一美分。
 下面试代码
程序代码:
#include<iostream>
using namespace std;

int main()
{
        cout<<"enter an aomunt in double ,for example 11.56 :";
        double amount;
        cin>>amount;
        // remainingAmount用来保留运算后的剩余的货币金额
        int remainingAmount = static_cast<int>(amount * 100);
        // "/"计算当前最大面值,“%”求未表示出的金额数(即被忽略的金额)

int numberOfOneDollars = remainingAmount / 100;
        remainingAmount  =remainingAmount % 100;
        
        int numberOfQuarters = remainingAmount / 25;
        remainingAmount = remainingAmount % 25;
        
        int numberOfDimes =remainingAmount / 10;
        remainingAmount = remainingAmount % 10;
        
        int numberOfNickels = remainingAmount / 5;
        remainingAmount = remainingAmount % 5;
        
        int numberOfPennies = remainingAmount;
        
        cout<<"Your amount        "<< amount <<"         consists of \n ";
/*规范化输出,使计数为0的不显示,计数为1的单位为单数
*/

if(numberOfOneDollars){
                if(numberOfOneDollars==1)
                cout<<"\t"<< numberOfOneDollars <<"        dollar \n" ;
                else
                cout<<"\t"<< numberOfOneDollars <<"        dollars \n" ;
                }
        if(numberOfQuarters)
        {
                if(numberOfQuarters==1)
                cout<<"\t"<< numberOfQuarters << "        quarter \n" ;
                else
                cout<<"\t"<< numberOfQuarters << "        quarters \n" ;
        }
        if(numberOfDimes)        {
                if(numberOfDimes==1)
                cout<<"\t"<< numberOfDimes << "        dime \n" ;
                else
                cout<<"\t"<< numberOfDimes << "        dimes \n" ;
                }
        if(numberOfNickels)
                {
                if(numberOfNickels==1)
                        cout<<"\t"<< numberOfNickels << "        nickel \n" ;
                else
                        cout<<"\t"<< numberOfNickels << "        nickels \n" ;
                }
        if(numberOfPennies)
                {
                if(numberOfPennies==1)        
                        cout<<"\t"<< numberOfPennies << "        pennise";
                else
                        cout<<"\t"<< numberOfPennies << "        pennises";
        }
                return 0[local]1[/local][local]2[/local]
        
        
        
        
}

我用了几组数字(11.56和11.11)进行了测试,其中一组结果不是我预期的效果,后来查看Liang博士的网上习题答案,可悲的是他的程序运行后也有点问题,我比较了下,我们的算法是一样的。
 希望,有做过或者技术娴熟的朋友能来帮忙解答一下。万分感谢

 测试截图 11.11 结果不正确。
5 回复
#2
左手拉一只猫2013-11-17 15:41
只有本站会员才能查看附件,请 登录
这就是用你的程序运行的结果,目测是没有错误的,你这个题目的意思就是把一个数分解成不同单位数的组成,最后显示出来。还是有错误的话,你逐步调试一下,看看这些变量(numberOfOneDollars、numberOfQuarters、numberOfDimes、numberOfNickels、numberOfPennies)分解的结果是不是对的。
  return 0[local]1[/local][local]2[/local]
你这个最后一行目测是
return 0;
的意思吧。
#3
p832lun2013-11-17 16:06
回复 2楼 左手拉一只猫
我刚刚调试了一下,发现了这个问题上图
只有本站会员才能查看附件,请 登录


只有本站会员才能查看附件,请 登录

11.13测试就正常了,和硬件有关系么?

[ 本帖最后由 p832lun 于 2013-11-17 16:12 编辑 ]
#4
左手拉一只猫2013-11-17 16:49
你用什么编译器编译的?
int remainingAmount = static_cast<int>(amount * 100);
这行是把原来浮点型的数据(amount * 100)转换成整型的remainingAmount,你第一个图里面转换就有问题了,11.11 转换成 1110(按照你的而设计思路应该转换成1111才对),我感觉可能是数据在强制转换的时候出了问题。
#5
p832lun2013-11-17 17:31
回复 4楼 左手拉一只猫
看来这个问题我得问问学电子的人
#6
游侠木木2013-11-17 21:41
程序没有错误啊!!我试了一下11.11,11.12,11.13都是正确的,有可能是编译器的问题吧
1