# C++ Program to Convert Days into Years, Months, Weeks, and Days

« C++ Tutorial C++ Example »

This article provides you some programs in C++ that is used to convert total number of days entered by user at run-time into years, months, weeks, and days.

For example, if user enters 406 (total number of days) as input, then the output will be 1 year, 1 month, 1 week and 4 days. Here is the conversion that shows how 406 days gets converted into years, months, weeks, and days:

```406 days = 1 (1*365) + 1 (1*30) + 1 (1*7) + 4
= 1 (year) + 1 (month) + 1 (week) + 4 (days)
= 1 (1*365) + 1 (1*30) + 1 (1*7) + 4
= 365 + 30 + 7 + 4
= 395 + 11
= 406```

The question is, write a C++ program that receives total number of days as input to convert and print given days into its respective years, months, weeks, and days. The program given below is the answer to this question:

```#include<iostream>

using namespace std;
int main()
{
int tot, days, weeks, months, years;
cout<<"Enter Total Number of Days: ";
cin>>tot;
years = tot/365;
months = (tot%365)/30;
weeks = ((tot%365)%30)/7;
days = ((tot%365)%30)%7;

cout<<"\nYears: "<<years<<endl;
cout<<"Months: "<<months<<endl;
cout<<"Weeks: "<<weeks<<endl;
cout<<"Days: "<<days<<endl;
cout<<endl;
return 0;
}```

The snapshot given below shows the initial output produced by above C++ program on converting total number of days into years, months, weeks, and days:

Now supply the input say 406 as total number of days and press `ENTER` key to see the output like shown in the snapshot given below:

In above program, when user enters 406 days, then it gets initialized to tot variable. Now the statement:

`years = tot/365;`

gives 1 because years variable is of int type. Therefore 1 gets initialized to years. And the statement:

`months = (tot%365)/30;`

evaluates like (tot%365)/30 gives (406%365)/30 gives (41)/30 gives 1. Therefore 1 gets initialized to months. And the statement:

`((tot%365)%30)/7;`

evaluates like ((tot%365)%30)/7 gives ((406%365)%30)/7 gives ((41)%30)/7 gives (11)/7 gives 1. Therefore 1 gets initialized to weeks. And the last statement, that is:

`((tot%365)%30)%7`

evaluates like ((tot%365)%30)%7 gives ((406%365)%30)%7 gives ((41)%30)%7 gives 11%7 gives 4. Therefore 4 gets initialized to days. In this way, the calculation goes like or the evaluation of all four conversion statements goes like.

Let's modify the above program with the program given below. This program provides little good user-experience because the output gets printed in one line instead of multiple as done in previous program:

```#include<iostream>

using namespace std;
int main()
{
int tot, days, weeks, months, years;
cout<<"Enter Total Number of Days: ";
cin>>tot;
years = tot/365;
months = (tot%365)/30;
weeks = ((tot%365)%30)/7;
days = ((tot%365)%30)%7;

cout<<endl<<tot<<" Days = ";
cout<<years<<" Years, ";
cout<<months<<" Months, ";
cout<<weeks<<" Weeks, and ";
cout<<days<<" Days.";
cout<<endl;
return 0;
}```

Here is its sample run with user input 413 as number of days:

Still the program looks weird, because that 1 years must be converted into 1 year (without s). Let's completely modify the above program:

```#include<iostream>

using namespace std;
int main()
{
int tot, days, weeks, months, years;
cout<<"Enter Total Number of Days: ";
cin>>tot;
years = tot/365;
months = (tot%365)/30;
weeks = ((tot%365)%30)/7;
days = ((tot%365)%30)%7;

cout<<endl<<tot<<" Days = ";
if(years>1)
cout<<years<<" Years, ";
else
{
if(years==1)
cout<<years<<" Year, ";
}
if(months>1)
cout<<months<<" Months, ";
else
{
if(months==1)
cout<<months<<" Month, ";
}
if(weeks>1)
cout<<weeks<<" Weeks, and ";
else
{
if(weeks==1)
cout<<weeks<<" Week, and ";
}
if(days>1)
cout<<days<<" Days.";
else
{
if(days==1)
cout<<days<<" Day.";
}
cout<<endl;
return 0;
}```

Here is its sample run with user input 63 days:

As you can see from above program's sample run, if any term like year, month, week, or days, gets equal to 0, then the output of that term is not shown.

C++ Online Test

« C++ Tutorial C++ Example »