万年历"/>
c语言和golang实现万年历
思路:year:=2021,month:=9
求出2021年8月31日,距离1900年1月1日的总天数,除以7取余数,就是空格的数量
万年历是连着的,一行有七个,所以7的余数就是当月一号所在的列数 -1 ,所在列数就是(余数 +1)
c++
#include <iostream>
using namespace std;int main()
{int year = 0;int month = 0;int sum = 0; //总天数cout << "请输入年份:" ;cin >> year;cout << "请输入月份:";cin >> month;//求出从1999到year的总天数for (int i = 1900; i < year; i++) {if (i%4 == 0&& i%100 != 0 || i%400 == 0){sum += 366;}else{sum += 365;}}// 求year年1月到(month-1)月的总天数int day = 0;//month月的天数for (int i = 1;i <= month;i++){if(i == 1||i == 3||i == 5||i == 7||i == 8||i == 10||i == 12){day = 31;sum += 31;}else if(i == 4||i == 6||i == 9||i == 11){day = 30;sum += 30;}else {if(year %4==0&&year % 100!=0||year % 400 ==0){day = 29;sum += 29;}else{day = 28;sum += 28;}}//由于上述循环把本月的天数也加了,所以需要减去if(i == month)sum -= day;}cout <<"sum :" << sum << endl;int space = sum % 7;cout <<"space :" << space << endl;cout << "一\t二\t三\t四\t五\t六\t日"<<endl;//打印空格for (int i = 0; i < space;i++){cout << "\t";}//打印数字for (int i=1;i<=day;i++){cout << i <<"\t";//换行if ((i+space) % 7 ==0){cout << endl;}}cout << endl;
}
golang
package main
import ("fmt"
)
func test1(){//1.给定年份和月份,可以键盘输入:var year intfmt.Print("请输入年份:")fmt.Scanf("%d",&year)var month intfmt.Print("请输入月份:")fmt.Scanf("%d",&month)//2.求出2018年7月31日到1900年1月1日的总天数sum := 0 //总天数//2.1先累加整年的天数for i := 1900; i < year; i++ {if i%4 == 0&& i%100 != 0 || i%400 == 0{sum += 366}else{sum += 365}}//2.2求2018年1月到7月的总天数day := 0 //每个月的天数for i := 1;i <= month;i++{switch i {case 1,3,5,7,8,10,12:{day = 31sum += 31}case 4,6,9,11:{day = 30sum += 30}case 2:if i%4 == 0&& i%100 != 0 || i%400 == 0{day = 29sum += 29}else{day = 28sum += 28}}if i == month{sum -= day}}fmt.Println(sum);//3.计算空格的数量space := sum % 7//打印fmt.Println("一\t二\t三\t四\t五\t六\t日")//打印空格for i:=0;i<space;i++{fmt.Print("\t")}//打印数字for i:=1;i<=day;i++{fmt.Print(i,"\t")//换行if (i+space) % 7 ==0{fmt.Println()}}fmt.Println()
}func main() {test1()}
更多推荐
c语言和golang实现万年历
发布评论