我是小小菜鸡 2017-09-22 03:24 采纳率: 100%
浏览 807
已采纳

为什么Number<60> minutes; 表示分(0~59)。求大神解答。小弟感激不尽

#include
#include
using namespace std;

template //数制为base的数
class Number
{
int n; //存放数的当前值
public:
Number(int i):n(i){} //i必须小于base
int advance(int k); //当前值增加k个单位
int value()const{ return n; } //返回数的当前值
};

class TimeOfDay{
public:
Number hours; //小时(0~23)
Number minutes; //分(0~59)
//**1** **********found**********
Number; //秒(0~59)
Number milliseconds; //毫秒(0~999)

TimeOfDay(int h=0, int m=0, int s=0, int milli=0)
:hours(h),minutes(m),seconds(s),milliseconds(milli){}
void advanceMillis(int k){ advanceSeconds(milliseconds.advance(k)); } //前进k毫秒
void advanceSeconds(int k) //前进k秒
{
//**2** **********found**********
advanceMinutes(seconds.advance(k));
}
void advanceMinutes(int k){ advanceHour(minutes.advance(k)); } //前进k分钟
void advanceHour(int k){ hours.advance(k); } //前进k小时
void show()const{ //按“小时:分:秒.毫秒”的格式显示时间
int c=cout.fill('0'); //将填充字符设置为'0'
cout<<setw(2)<<hours.value()<<':' //显示小时
<<setw(2)<<minutes.value()<<':' //显示分
<<setw(2)<<seconds.value()<<'.' //显示秒
<<setw(3)<<milliseconds.value(); //显示毫秒
cout.fill(c); //恢复原来的填充字符
}
};

template
int Number::advance(int k)
{
n+=k; //增加k个单位
int s=0; //s用来累计进位
//**3** **********found**********
while(n>=base)_____________________ //n到达或超过base即进位
return s; //返回进位
}

int main()
{
TimeOfDay time(1,2,3,4); //初始时间:1小时2分3秒4毫秒
time.show(); //显示时间
time.advanceHour(5); //前进5小时
time.advanceSeconds(122); //前进122秒(2分零2秒)
time.advanceMillis(1017); //前进1017毫秒(1秒零17毫秒)
cout<<endl;
time.show(); //显示时间
cout<<endl;
return 0;
}

  • 写回答

4条回答 默认 最新

  • Junpb 2017-09-22 07:18
    关注

    所有程序的数组性问题都是以0开始,一开始定义的60指的是数组内有60个数。而数字的计数是从0开始,所以有59为结束。
    至于为什么是从0开始,是因为本身程序到最后都要翻译成机器语言,机器才能识别。
    而机器是以电流的高低来确定0和1,也就是计算机使用二进制的原因
    也就是说机器的计数是从0x0000的全低电位开始计数,即为第一个数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题