编写一个程序来计算复活节星期天的日期。复活节星期日是春天的第一个满月之后的第一个星期日。使用数学家卡尔·弗里德里希·高斯(Carl Friedrich
Gauss)在1800年发明的算法:
y
是年份(如1800年或2001年)y
通过19
并调用剩余a
。忽略商。y
通过100
获得商b
和余数c
。b
通过4
获得商d
和余数e
。8 * b + 13
通过25
获得商g
。忽略其余部分。19 * a + b - d - g + 15
通过30
得到的余数h
。忽略商。c
通过4
获得商j
和余数k
。a + 11 * h
通过319
获得商m
。忽略其余部分。2 * e + 2 * j - k - h + m + 32
通过7
得到的余数r
。忽略商。h - m + r + 90
通过25
获得商n
。忽略其余部分。h - m + r + n + 19
通过32
获得的剩余部分p
。忽略商。然后复活节p
是一个月的一天n
。
例如,如果y为2001:
a = 6
b = 20
c = 1
d = 5
e = 0
g = 6
h = 18
j = 0
k = 1
m = 0
r = 6
n = 4
p = 15
因此,在2001年,复活节星期日是4月15日。
确保提示用户输入年份并让用户输入年份。另外,请确保输出p和n的值以及描述输出值的适当消息。
将其放入Java代码时遇到了一些麻烦。这是我尝试过的:
import java.util.Scanner;
public class Easter {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int y = 2014;
int a = y % 19;
int b = y / 100;
int c = y % 100;
int d = b / 4;
int e = b % 4;
int g = (8 * b + 13) / 25;
int h = (19 * a + b - d - g + 15) % 30;
int j = c / 4;
int k = c % 4;
int m = (a + 11 * h) / 319;
int r = (2 * e + 2 * j - k - h + m + 32) % 7;
int n = (h - m + r + 90) / 25;
int p = (h - m + r + n + 19) % 32;
getEasterSundayMonth = n;
System.out.println("Month: " + Easter.getEasterSundayMonth());
}
}
这就是我所拥有的。我不知道如何分配内容,就像我试图使getEasterSundayMonth
的值相等一样n
,很确定它是不正确的。我从这里去哪里?
试试这个:
import java.util.Scanner;
class Easter
{
public static void main(String[] args)
{
System.out.print("Please enter a year to calculate Easter Sunday\n>");
Scanner s = new Scanner(System.in);
int inputted = getResult(s);
while(inputted <= 0)
{
System.out.print("Expected a positive year. Please try again:\n>");
inputted = getResult(s);
}
System.out.println(getEasterSundayDate(inputted));
}
private static int getResult(Scanner s)
{
while(!s.hasNextInt())
{
System.out.print("Expected a valid year. Please try again:\n>");
s.nextLine();
}
return s.nextInt();
}
public static String getEasterSundayDate(int year)
{
int a = year % 19,
b = year / 100,
c = year % 100,
d = b / 4,
e = b % 4,
g = (8 * b + 13) / 25,
h = (19 * a + b - d - g + 15) % 30,
j = c / 4,
k = c % 4,
m = (a + 11 * h) / 319,
r = (2 * e + 2 * j - k - h + m + 32) % 7,
n = (h - m + r + 90) / 25,
p = (h - m + r + n + 19) % 32;
String result;
switch(n)
{
case 1:
result = "January ";
break;
case 2:
result = "February ";
break;
case 3:
result = "March ";
break;
case 4:
result = "April ";
break;
case 5:
result = "May ";
break;
case 6:
result = "June ";
break;
case 7:
result = "July ";
break;
case 8:
result = "August ";
break;
case 9:
result = "September ";
break;
case 10:
result = "October ";
break;
case 11:
result = "November ";
break;
case 12:
result = "December ";
break;
default:
result = "error";
}
return result + p;
}
}
2001
结果的输入April 15
作为输出。
问题 你需要在给出的年份中找到复活节的月份和日期。 解决方案 下面的函数返回数组有两个要素:复活节的月份( 1-12 )和日期。如果没有给出任何参数,给出的结果是当前的一年。这是 在CoffeeScript 的匿名公历算法实现的。 gregorianEaster = (year = (new Date).getFullYear()) -> a = year % 19 b = ~~(year
我有一个小谜语,我想解开它困扰着我,这个谜语是: 我不确定解决这个问题的假设是什么? 谢谢,请帮帮我。
问题内容: 我需要从MySQL选择语句中的某个日期算起几周。其中一个表中有一个日期列,我需要计算该日期有几周。 例子: 6 days away, weeks out = 0 7 days away, weeks out = 1 13 days away, weeks out = 1 14 days away, weeks out = 2 问题答案: 使用DATEDIFF函数: WEEKS的问题在于
问题内容: 在我的代码中,日期之间的差异是错误的,因为它应该是38天而不是8天。我该如何解决? 问题答案: 问题出在变量中。月以Capital M表示。 尝试更改为: 有关更多信息,请参见此javadoc。 编辑: 这是代码,如果您想以注释的方式打印差异: 希望对您有所帮助!
我怀疑 R 有一个内置方法来做到这一点,但我是编程新手,并试图弄清楚如何手动计算日期之间的天数作为练习。这是我的代码: 我写了一个代码来确定两个日期之间的天数,使用python。我现在正在尝试将其转换为 R 以用于我正在做的另一个作业。当我运行每个单独的功能时,它们似乎工作正常。当我调用daysBetweenDates(2012,1,时,出现以下错误: 第1天出错:二进制运算符的非数字参数
问题 你需要找出两个日期间隔了几年,几个月,几天,几个小时,几分钟,几秒。 解决方案 利用 JavaScript 的日期计算函数 getTime() 。它提供了从 1970 年 1 月 1 日开始经过了多少毫秒。 DAY = 1000 * 60 * 60 * 24 d1 = new Date('02/01/2011') d2 = new Date('02/06/2011') days_pas