牛客網第十一天的訓練
阿新 • • 發佈:2018-11-24
基礎題:程式設計師日
#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; }