前言
准备机试,参考了leetcode的C语言版手册,以及王道计算机刷题指南,一步一步来,记性不好,特做此笔记巩固,争取不断更新
暴力求解篇
反序数
求反序数、对称数等等
int Reverse(int x)
{
int revx = 0;
while(x!=0){
revx *= 10;
revx += x%10;
x /= 10;
}
return revx;
}
日期问题
闰年
判断规则:
- 能被4整除,且不是100的倍数
- 能被400整除
代码
bool IsLeapYear(int year){
return (year%4==0&&year%100!=0)||(year%400==0)
}
例题
给出年份和第几天算几月几号
解答
代码还没养成行为规范,会继续改进的(哭)
想法走了歪路,以至于for循环写的很晦涩,其实直接按月份while不停加然后判断就行了
注意日期表达形式,加”0“,学到老,活到老
#include <iostream>
using namespace std;
bool IsLeapYear(int year){
return (year%4==0&&year%100!=0)||(year%400==0);
}
int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
int month1[]={31,29,31,30,31,30,31,31,30,31,30,31};
void printday(int n,int year,int *month)
{
int mm=1;
int day=0;
int count=0;
for(int i=0;i<12;i++)
{
if(count==n)break;
else{
if((count+month[i])<n)
{
count+=month[i];
mm++;
}
else{
day=n-count;
count=n;
}
}
}
if(mm<10)
{
cout<<year<<"-0"<<mm;
}
else
cout<<year<<"-"<<mm;
if(day<10)cout<<"-0"<<day<<endl;
else cout<<"-"<<day<<endl;
}
int main(){
int year;
int n;
while(cin>>year>>n)
{
if(IsLeapYear(year))
{
printday(n, year, month1);
}
else{
printday( n,year, month);
}
}
return 0;
}
星期Day of Week
有一个公式,记不下来,可以mark一下
记 隐藏条件:1年1月1号是星期一