洛谷 P2005 A/B Problem II
题目背景
为了让大家紧张的心情放松一下,这一题题是一道非常简单的题目。
题目描述
给出正整数N和M,请你计算N div M(N/M的下取整)。
输入输出格式
输入格式:
一行,两个正整数,N和M。
输出格式:
一行,一个整数,表示N div M。
输入输出样例
说明
• 对于60%的数据:N,M ≤ 750!,答案≤ 7!。
• 对于100%的数据:N,M ≤ 6250!,答案≤ 13!。
请注意:上面的两句话并不是感叹句,而是陈述句。标点符号使用没有错误。
思路:模拟。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; string a1,b1; int a[100001],b[100001]; int c[100001],t[100001]; int compare(int aa[],int bb[]){ if(aa[0]>bb[0]) return 1; if(aa[0]<bb[0]) return -1; for(int i=aa[0];i>0;i--){ if(aa[i]>bb[i]) return 1; if(aa[i]<bb[i]) return -1; } return 0; } void numcpy(int aa[],int bb[],int l){ for(int i=1;i<=aa[0];i++) bb[i+l-1]=aa[i]; bb[0]=aa[0]+l-1; } int main(){ cin>>a1>>b1; a[0]=a1.size(); b[0]=b1.size(); c[0]=a[0]-b[0]+1; for(int i=1;i<=a[0];i++) a[i]=a1[a[0]-i]-48; for(int i=1;i<=b[0];i++) b[i]=b1[b[0]-i]-48; for(int i=c[0];i>0;i--){ memset(t,0,sizeof(t)); numcpy(b,t,i); while (compare(a,t)>=0){ c[i]++; if(!compare(a,t)){ a[0]=0;continue; } for(int i=1;i<=a[0];i++){ if (a[i]<t[i]){ a[i+1]--;a[i]+=10; } a[i]-=t[i]; } while(a[0]>0&&!a[a[0]]) a[0]--; } } while(c[0]>0&&!c[c[0]]) c[0]--; if(!c[0]) cout<<0<<endl; else for(int i=c[0];i>0;i--) cout<<c[i]; }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。