这道题 根据题目意思看 不难 但有点复杂

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std ;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //将12月每天的天数放入数组a
int main()
{
    char c[100];
    int i,b[3]={0,0,0},k=0;
    fgets(c,100,stdin);//输入字符串
    for(i=0;c[i];i++)
    {
        while(isdigit(c[i]))
            b[k]=b[k]*10+c[i++]-'0';//取出数据放入b数组
        k++;
    }
    
    if(b[0]%4==0&&b[0]%100!=0||b[0]%400==0)//如果年份是闰年 则2月加一天
        a[1]+=1;
    
    if(b[2]>2)//如果天数大于2 则直接-2
        b[2]=b[2]-2;
    else if(b[2]<=2)
    {
        int k;
        k=2-b[2];//当前天数不够两天 则还差几天
        b[1]--;//如果当前天数不够 则月数减1
        if(b[1]>1)
        {
            b[2]=a[b[1]-1]-k;
        }
        else//如果当前是1月 则年数减一
        {
            b[0]--;
            b[1]=12;
            b[2]=31-k;
        }
    }
    for(i=0;i<3;i++)
    {
        if(!(b[i]/10))//如果不是两位数则补0
            cout << 0 << b[i] ;
        else
            cout << b[i] ;
        if(i!=2)//年数和月数后要加-
            cout << '-' ;
    }
}
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] s = sc.nextLine().split("-");//讲字符串按-分割
        int year = Integer.parseInt(s[0]);//将字符转化为整形
        int month = Integer.parseInt(s[1]);
        int day = Integer.parseInt(s[2]);
        int[] m = {31,28,31,30,31,30,31,31,30,31,30,31};
        //判断闰年
        if(year % 4 == 0 && year % 100 != 0 || year % 400 ==0){
                m[1]=29;
        }
        day -= 2;
        if(month == 1){
            if(day == 0){
                year--;
                month = 12;
                day = m[month-1];
            }else if(day == -1){
                year--;
                month = 12;
                day = m[month-1] - 1;
            }
        }else{
            if(day == 0){
                month--;
                day = m[month-1];
            }
            if(day == -1){
                month--;
                day = m[month-1] - 1;
            }
        }
        System.out.printf("%d-%02d-%02d",year,month,day);
    }
}