首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的玛雅历法

C++中的玛雅历法
EN

Stack Overflow用户
提问于 2012-04-25 02:30:12
回答 1查看 1.7K关注 0票数 3

因此,我有一个任务,我应该用C++编写玛雅日历,这样日历就具有以下功能:

代码语言:javascript
复制
argv[1] | argv[2]        |  argv[3]        | output
m+d     | Mayan date     |  number of days | Mayan date
m-d     | Mayan date     |  number of days | Mayan date
m-m     | Mayan date     |  Mayan date     | number of days
g=      | Gregorian date |                 | Mayan date
m=      | Mayan date     |                 | Gregorian date

,第一次行动,m+d需要玛雅人的日期和数天。该操作将天数添加到玛雅日期,以生成玛雅日期作为输出。第二个操作m-d减去玛雅日期的天数,生成一个玛雅日期作为输出。第三个操作m-m计算两个玛雅日期之间的天数。第四个操作g=将公历日期转换为玛雅日期。最后的操作m=将玛雅日期转换为公历日期。

玛雅历法单位的设立方式如下:

代码语言:javascript
复制
Days                  Long Count period         Long Count unit
1                                               1 Kin
20                    20 Kin                    1 Uinal
360                   18 Uinal                  1 Tun
7,200                 20 Tun                    1 Ka'tun
144,000               20 Ka'tun                 1 Bak'tun
2,880,000             20 Bak'tun                1 Pictun
57,600,000            20 Pictun                 1 Kalabtun
1,152,000,000         20 Kalabtun               1 K'inchiltun
23,040,000,000        20 K'inchiltun            1 Alautun

我在初始化玛雅日历对象时遇到了麻烦。以下是我到目前为止所拥有的:

代码语言:javascript
复制
class MayanDate {
// Bak'tun, Ka'tun, etc stuff ...
unsigned int Kin = 1;
unsigned int Uinal = 20;
unsigned int Tun = 360;
unsigned int Katun = 7200;
unsigned int Baktun = 144000;
unsigned int Pictun = 2880000;
unsigned int Kalabtun = 57600000;
unsigned long Kinchiltun = 1152000000;
unsigned long Alautun = 23040000000;


public:

        MayanDate();
        MayanDate( unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);

        void set( unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);
        MayanDate &operator++();
        int operator-( const MayanDate &) const;
        MayanDate operator+( unsigned int ) const;
        MayanDate operator-( unsigned int) const;
        bool operator==( const MayanDate & ) const;
        bool operator!=(const MayanDate & m ) const;
        void get_string( char*, unsigned int) const;
};

我希望能够将单元设置为它们在初始化类时所代表的天数,这样使用它们就更容易了。

我上面的代码没有编译,我也不知道为什么。任何关于我做错事的指示都会非常有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-25 03:59:54

我认为你应该用玛雅风格在你的课堂上保存数据。你必须有能力改变从玛雅时代开始到现在这样的日子:

代码语言:javascript
复制
void toMayan(long long d)
{
  kin = d % 20; d /= 20;
  unial = d % 18; d /= 18;
  tun = d %20; d /= 20;
  //...
}

返回转换很简单:kin + 20 * (unial + 18 * (tun + 20 * (...)))

接下来,您应该知道如何计算从某个日期到另一个日期的公历中的天数。例如,您可以查看java的日期类源( http://www.docjar.com/html/api/java/util/Date.java.html )。

最后-你必须知道任何玛雅日期的格里高利形式,以计算不同的日子之间的日历。将一个日期转换为天数,减去(或添加)差额,然后转换为另一个日期。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10308601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档