讓咱們一塊兒聽着馬克西姆的Still Water走進IT天堂…
沉默的雨,無聲勝有聲;逗人的雨,真叫人喜悅。能夠沒必要穿雨衣,在戶外躑躅漫步,雨似蜜似酒,滋潤着心靈。雨,好像是千萬支魔指,好像是千萬條琴絃,彈出了變幻無窮的聲音。
廢話過多,讓咱們走進正題吧…python
題目描述
給出正整數N和M,請你計算N div M(N/M的下取整)。ios
輸入格式
兩行,兩個正整數,N和M。c++
輸出格式
一行,一個整數,表示N div M。web
• 對於60%的數據:N,M ≤ 750!,答案≤ 7!。數組
• 對於100%的數據:N,M ≤ 6250!,答案≤ 13!。svg
看着這些莫名其妙的感嘆號,我不由拿出了計算器,6250×6249×6248×6247×…6244×6243=…
很明顯,數字太大了!
(爲何c++不像python同樣自帶高精度!!!!!!!)spa
說多話也沒用,上代碼!code
時間複雜度太高,不宜使用xml
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[100005]={0},b[100005]={0},ans[100005]={0},la,lb,lens,i,j,k;//a:被除數;b:除數;ans:商;la:被除數長度;lb:除數長度;lans:商長度i,j,k:循環用 char s1[100005]={0},s2[100005]={0}; int main() { cin>>s1>>s2;//讀入 la=strlen(s1); lb=strlen(s2); for(i=1;i<=la;i++) { a[i]=s1[i-1]-'0'; } for(i=1;i<=lb;i++) { b[i]=s2[i-1]-'0';//將字符串轉換成數組 } if(la<lb)//若是被除數比除數的長度短,直接輸出0 { cout<<"0"; return 0; } if(la==lb)//若是長度同樣,若被除數較小,一樣輸出0 { for(i=1;i<=la;i++) { if(a[i]<b[i]) { cout<<0; return 0; } else { if(a[i]>b[i]) { break; } } } } lens=la-lb+1;//把除法轉換成減法,不停地減,每減一次,對應位置的答案加一 for(i=1;i<=lens;i++) { while(1) { for(j=i,k=1;j<=lb+i-1,k<=lb;j++,k++) { if(a[j]>b[k])//若是被除數的某位置先比除數大了,則能夠作減法,跳出循環 { j=lb+1; break; } else { if(a[j]<b[k])//若是被除數的某位置先比除數小了,則不可作減法,跳出循環 { break;//若兩數相同,則繼續循環判斷 } } } if(j>lb)//若是能夠作減法 { for(j=lb+i-1,k=lb;j>=i,k>=1;j--,k--) { if(a[j]-b[k]>=0) { a[j]-=b[k];//減法實現 } else { a[j]+=10,a[j-1]--,a[j]-=b[k];//若是一個位置上的數小於零,則退位 } } ans[i]++; } else//若是不能作減法 { a[i+1]+=a[i]*10;//將最前一位的全部數所有退到下一位置的數上 a[i]=0;//歸零 break;//跳出減法循環 } } } for(i=1;i<=lens;i++) { if(i==1&&ans[i]==0);//刪去前導0 else { cout<<ans[i]; } } return 0; }
時間複雜度太高,不建議使用token
稻花香裏說豐年,聽取WA聲一片