1. 程式人生 > >牛客網第十一天的訓練

牛客網第十一天的訓練

基礎題:程式設計師日

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int num[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int isleap(int y);
int main()
{
	int y,m,d,ans;
	while(~scanf("%d-%d-%d",&y,&m,&d))
	{
		ans=0;
		if(m>=3) ans=isleap(y);
		for(int i=1;i<m;i++) ans+=num[i];
		ans+=d;
		cout<<ans<<endl;	
	}
	return 0;
}
int isleap(int y)
{
	if( ((y%4==0)&&(y%100!=0)) ||(y%400==0) ) return 1;
	return 0;	
}

進階題:牛牛打響指

開始不小心寫錯了函式,應該是大數除2,寫成了大數乘2,函式就不刪除,怪難受的

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
//string multiply(string str);	  大數乘2 
string add1(string str);		//大數加1 
string div2(string str);		//大數除2 
int main()
{
	int ans,len;
	string str;
	while(cin>>str)
	{
		//reverse(str.begin(),str.end());	反轉字串 
		//cout<<str<<endl;					輸出當前字串	
		//cout<<multiply(str)<<endl;		檢測大數乘2 
		//cout<<add1(str)<<endl;			檢測大數加1 
		//cout<<div2(str)<<endl;			檢測大數除2		
		ans=0;
		len=str.length(); 
		while( !(len==1 && str[len-1]-'0'==1))
		{
			//cout<<str<<endl;
			int fi=str[len-1]-'0';
			if(fi&1)				//奇數+1 
			{
				reverse(str.begin(),str.end());
				str=add1(str);
				reverse(str.begin(),str.end());	
			}						//偶數/2 
			else 
			{
				str=div2(str);					
			}
			ans++;
			len=str.length();
		}
		cout<<ans<<endl;
	}
	return 0;	
} 
string div2(string str)
{
	int d=0,n,t,i;
	char e;
	for(i=0;i<str.length();i++)
	{
		n=str[i]-'0';
		t=((n+d*10)/2)%10;
		str[i]=t+'0';
		d=(n%2);
	}
	reverse(str.begin(),str.end());
	int m=str.length()-1;
	while(str[m]=='0')
	{
		m--;
	}
	string s1;
	for(int i=0;i<=m;++i)
	{
		s1+=str[i];
	}
	reverse(s1.begin(),s1.end());
	return s1;
}
string add1(string str)
{
	int d=1,n,t,i;
	char e;
	for(i=0;i<str.length();++i)
	{
		n=str[i]-'0';					//n是第i位的數字 
		t=(n+d)%10;						//t是加上進位後的數字 
		str[i]=t+'0';					//轉換成char 
		d=(n+d)/10;						//處理此時的進位 
	}
	if(d!=0)							//如果最後一位不為0,說明有進位 
	{
		e=d+'0';						//把進位拼接進去 
		str=str+e;
	}
	return str;
}
string multiply(string str)
{
	int d=0,n,t,i;
	char e;
	for(i=0;i<str.length();i++)
	{
		n=str[i]-'0';
		t=(n*2+d)%10;
		str[i]=t+'0';
		d=(n*2)/10;
	}
	if(d!=0)
	{
		e=d+'0';
		str=str+e;
	}
	return str;
}