Algorithm 4位年份和十年计数器

Algorithm 4位年份和十年计数器,algorithm,overflow,Algorithm,Overflow,所以我遇到了这个问题,我想不出一个优雅的解决方案,也许有人能把我指向正确的方向。 假设我有一个4位的计数器(这样它可以从0-15十进制数)计算经过的年数。在16年,年份计数器将溢出并重置回0,在17年年,它将是1,依此类推。我还有一个decade计数器,它的值为1到10到19,值为2到29,依此类推。 如果我有yearCounter和DeCounter信息,如何获得经过的总年数 例如,decade=1和counter=2年份=18 这类问题有名字吗?是否有一个函数可以计算从这些计数器到十年溢出的

所以我遇到了这个问题,我想不出一个优雅的解决方案,也许有人能把我指向正确的方向。 假设我有一个4位的
计数器
(这样它可以从
0-15
十进制数)计算经过的年数。在
16年
,年份计数器将溢出并重置回
0
,在
17年
年,它将是
1
,依此类推。我还有一个
decade
计数器,它的值为
1
10
19
,值为
2
29
,依此类推。 如果我有yearCounter和DeCounter信息,如何获得经过的总年数

例如,
decade=1
counter=2
<代码>年份=18


这类问题有名字吗?是否有一个函数可以计算从这些
计数器到
十年溢出的
年数
s?

问题的名称是模算术;如果
不是负值,我们有

相反的公式(您正在寻找)是

其中,
%
是余数,
/
是整数除法

例如,如果
year=2018

decade  = 2018 / 10 = 201
counter = 2018 % 16 = 2
相反的公式给出

year = 201 * 10 + (16 - (201 * 10) % 16 + 2) % 16 =
       2010 + (16 - 2010 % 16 + 2) % 16 =
       2010 + (16 - 10 + 2) % 16 =
       2010 + 8 % 16 =
       2010 + 8 =
       2018 
decade  = 2018 / 10 = 201
counter = 2018 % 16 = 2
year = 201 * 10 + (16 - (201 * 10) % 16 + 2) % 16 =
       2010 + (16 - 2010 % 16 + 2) % 16 =
       2010 + (16 - 10 + 2) % 16 =
       2010 + 8 % 16 =
       2010 + 8 =
       2018