1.
求
1+2+3+...+n
,要求不能使用乘除法、
for
、
while
、
if
、
else
、
switch
、
case
等关键字及条件判断语句(A?B:C
求1+2+3+...+n_牛客题霸_牛客网
(课堂讲解
)
class Add
{
public:
Add()
{
_ret += _i;
_i++;
}
static int GetRet()
{
return _ret;
}
static void Init()
{
_i = 1;
_ret = 0;
}
private:
static int _i;
static int _ret;
};
int Add::_i = 0;
int Add::_ret = 0;
class Solution {
public:
int Sum_Solution(int n) {
Add::Init();
Add arr[n];//新一点的编译器支持的,变长数组c99
return Add::GetRet();
}
};
class Add
{
public:
Add()
{
_ret += _i;
_i++;
}
static int _i;
static int _ret;
};
int Add::_i = 0;
int Add::_ret = 0;
class Solution {
public:
int Sum_Solution(int n) {
Add::_i = 1;
Add::_ret = 0;
Add arr[n];//新一点的编译器支持的,变长数组c99
return Add::_ret;
}
};
使用友元
class Add
{
friend class Solution;
public:
Add()
{
_ret += _i;
_i++;
}
private:
static int _i;
static int _ret;
};
int Add::_i = 1;
int Add::_ret = 0;
class Solution {
public:
int Sum_Solution(int n) {
Add::_i = 1;
Add::_ret = 0;
Add arr[n];//新一点的编译器支持的,变长数组c99
return Add::_ret;
}
};
使用内部类
#include <iostream>
using namespace std;
int main()
{
int year,month,day;
cin>>year>>month>>day;
//数组中表示1月累加到i月的天数
int Arr[13] = {0,31,59,90,120,151,181,212,243,273,304,334,365};
int totalDay = Arr[month - 1];
totalDay += day;
if(month > 2 && ((year%4==0&&year%100!=0)||(year % 400 == 0)))
{
totalDay += 1;
}
cout<<totalDay<<endl;
return 0;
}
构造日期类
#include<iostream>
using namespace std;
static int GetMontyDay[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
struct Date
{
int year;
int month;
int day;
};
Date GetDate(long n)
{
Date temp;
temp.year = n/10000;
temp.month = n/100%100;
temp.day = n%100;
return temp;
}
Date operator++(Date& n)
{
n.day+=1;
int x = GetMontyDay[n.month];
if(n.month==2&&(n.year%4==0&&n.year%100!=0||n.year%400==0))
{
x++;
}
if(n.day>x)
{
n.month++;
n.day = 1;
if(n.month>12)
{
n.year++;
n.month = 1;
}
}
return n;
}
bool operator==(Date& n1,Date& n2)
{
return n1.year == n2.year&&n1.month == n2.month && n1.day == n2.day;
}
bool operator!=(Date& n1,Date& n2)
{
return !(n1==n2);
}
int main()
{
long n1;
long n2;
int ret = 0;
cin>>n1>>n2;
Date d1 = GetDate(n1);
Date d2 = GetDate(n2);
if(n1>n2)
{
while(d1!=d2)
{
++d2;
ret++;
}
}
else{
while(d1!=d2)
{
++d1;
ret++;
}
}
cout<<ret+1<<endl;
return 0;
}
#include<iostream>
using namespace std;
bool isLeapYear(int year)
{
if((year%4==0&&year%100!=0)||year%400 == 0)
{
return true;
}
else
{
return false;
}
}
int GetMonthDay(int year,int month)
{
int MonthDayArr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
if(month==2&&isLeapYear(year))
{
return 29;
}
else
{
return MonthDayArr[month];
}
}
int main()
{
int year = 0;
int month = 1;
int day = 0;
cin>>year>>day;
while(day>GetMonthDay(year,month))
{
day-=GetMonthDay(year,month);
month++;
}
printf("%d-%.2d-%.2d\n",year,month,day);
return 0;
}
#include<iostream>
using namespace std;
bool isLepYear(int year)
{
if((year%4==0 && year%100!=0)|| year%400==0)
{
return true;
}
else
{
return false;
}
}
int GetMonthDay(int year,int month)
{
int MonthDayArr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(month ==2 && isLepYear(year))
{
return 29;
}
else
{
return MonthDayArr[month];
}
}
int main()
{
int n=0;
int year=0;
int month=0;
int day=0;
int DaySum=0;
cin>>n;
while(n--)
{
cin>>year>>month>>day>>DaySum;
day+=DaySum;
while(day > GetMonthDay(year,month))
{
day-=GetMonthDay(year,month);
month++;
if(month==13)
{
month=1;
year+=1;
}
}
printf("%d-%.2d-%.2d\n",year,month,day);
}
return 0;
}