leetcode 3280. 将日期转换为二进制表示 简单
给你一个字符串 date
,它的格式为 yyyy-mm-dd
,表示一个公历日期。
date
可以重写为二进制表示,只需要将年、月、日分别转换为对应的二进制表示(不带前导零)并遵循 year-month-day
的格式。
返回 date
的 二进制 表示。
示例 1:
输入: date = "2080-02-29"
输出: "100000100000-10-11101"
解释:
100000100000, 10 和 11101 分别是 2080, 02 和 29 的二进制表示。
示例 2:
输入: date = "1900-01-01"
输出: "11101101100-1-1"
解释:
11101101100, 1 和 1 分别是 1900, 1 和 1 的二进制表示。
提示:
date.length == 10
date[4] == date[7] == '-'
,其余的date[i]
都是数字。- 输入保证
date
代表一个有效的公历日期,日期范围从 1900 年 1 月 1 日到 2100 年 12 月 31 日(包括这两天)。
分析:简单模拟。首先将 date 按照 “yyyy-mm-dd” 的格式解析出年 year、月 month、日 day,然后将 year,month 和 day 的二进制表示字符串用 “-” 连接起来,返回结果。
void exchange(int num,char *ans)
{
int l=strlen(ans),t=0;
char temp[100]={0};
while(num>=2)
temp[t++]=num%2+'0',num/=2;
if(num)temp[t++]=num+'0';
for(int i=t-1,j=l;i>=0;--i,++j)
ans[j]=temp[i];
}
char* convertDateToBinary(char* data) {
int yy=0,mm=0,dd=0;
yy=1000*(data[0]-'0')+100*(data[1]-'0')+10*(data[2]-'0')+data[3]-'0';
mm=10*(data[5]-'0')+data[6]-'0';
dd=10*(data[8]-'0')+data[9]-'0';
char *ans=(char*)malloc(sizeof(char)*30);
for(int i=0;i<30;++i)ans[i]=0;
exchange(yy,ans);ans[strlen(ans)]='-';
exchange(mm,ans);ans[strlen(ans)]='-';
exchange(dd,ans);
return ans;
}