纯小白,第一次写对一道算法题,纪念一下~
原题:
解答:
#include<stdio.h>
int main() {
//读入输入的日期赋给indata
int indata;
scanf("%d", &indata);
//定义原始输入的日期各个部分并赋值
int year, month, day;
day = indata % 100;
month = indata / 100 % 100;
year = indata / 10000;
//定义倒序后的日期的各个部分
int day2, month2, year2;
//从输入的年份开始,逐层累加,类似于时钟效果,
//这里以天为自变量,每30天进一个月,每12个月进一年。
for (int i = 0; i < 70000; i++) //第一层年份维度的循环
{
if ((i + 1) % 6 == 0) { month = month - 1; }
for (int j = 0; j < 12; j++) //第二层月份维度的循环
{
if (month > 12) { month = 0; year = year + 1; }
for (int k = 0; k < 30; k++)//第三层天维度的循环
{
if (day > 30) { day = 0; month = month + 1; }
else {
day = day + 1;
}
//给倒序后的日期的各个部分赋值
day2 = day % 10 * 10000000 + day / 10 % 10 * 1000000;
month2 = month % 10 * 100000 + month / 10 % 10 * 10000;
year2 = year % 10 * 1000 + year / 10 % 10 * 100 + year / 100 % 10 * 10 + year / 1000 % 10;
if ((day2 + month2 + year2) == (day + month * 100 + year * 10000)) //判断是否为回文数
{
printf("%d\n", day + month * 100 + year * 10000);
i = 99999;
break;
}
}
}
}
//变量初始化
day = indata % 100;
month = indata / 100 % 100;
year = indata / 10000;
day2 = 0;
month2 = 0;
year2 = 0;
//重复上面操作,改动的地方在于,判断是回文数后,继续进行一次if判断ABABBABA型
for (int i = 0; i < 70000; i++) {
if ((i + 1) % 6 == 0) { month = month - 1; }
for (int j = 0; j < 12; j++) {
if (month > 12) { month = 0; year = year + 1; }
for (int k = 0; k < 30; k++) {
if (day > 30) { day = 0; month = month + 1; }
else {
day = day + 1;
}
day2 = day % 10 * 10000000 + day / 10 % 10 * 1000000;
month2 = month % 10 * 100000 + month / 10 % 10 * 10000;
year2 = year % 10 * 1000 + year / 10 % 10 * 100 + year / 100 % 10 * 10 + year / 1000 % 10;
if ((day2 + month2 + year2) == (day + month * 100 + year * 10000)) {
int a = day % 10;
int b = day / 10 % 10;
int a02 = month % 10;
int b02 = month / 10 % 10;
if ((a == a02) && (b == b02)) {
printf("%d\n", day + month * 100 + year * 10000);
i = 99999;
break;
}
}
}
}
}
}