Single Round Math sdut3260高精度除以低精度
做高精度除法,从高位开始除。。高位除剩下的我们就*10扔给低一位处理,最终余数是在最低位取模得到的
高精除以高精,我们可以这么做,让除数在后面补零,刚好小于被除数,作若干次减法,减的次数加到商里面
然后如果除数后面有零,我们就去掉一个0,商*=10,直到除数刚好小于被除数,统计减法次数加到商里面
如果我们发现去掉所有零,被除数仍然是小于除数的。。那么我们就做完了除法。。(高精度带余除法
这个题就是算高精度对11取模,。。输出答案别忘了break;
两种解法
高精除以低精
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int s[1005],p[1005]; char a[1005],b[1005]; int main(){ int T;scanf("%d",&T); while(T--){ scanf("%s%s",a,b); int la=strlen(a),lb=strlen(b),flag=0,i,k=11; if(la!=lb) {printf("NO\n");continue;} for(i=0;i<la;++i){ if(a[i]!=b[i]) { printf("NO\n");flag=1;break; } } if(flag) continue; s[0]=la; for(i=0;i<la;++i){ s[i+1]=a[la-i-1]-'0'; } int r; for(i=s[0];i>=1;--i){ if(i==1) r=s[i]%k; if(i!=1) s[i-1]+=s[i]%k*10; s[i]/=k; } if(r==0) printf("YES\n"); else printf("NO\n"); } return 0; }
直接取模
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int s[1005],p[1005]; char a[1005],b[1005]; int main(){ int T;scanf("%d",&T); while(T--){ scanf("%s%s",a,b); int la=strlen(a),lb=strlen(b),flag=0,i,k=11; // printf("(%d,%d)\n",la,lb); if(la!=lb) {printf("NO\n");continue;} for(i=0;i<la;++i){ if(a[i]!=b[i]) { printf("NO\n");flag=1;break; } } if(flag) continue; int ans=0; for(i=0;i<la;++i){ ans=(ans*10+a[i]-'0')%11; } if(ans==0) printf("YES\n"); else printf("NO\n"); } return 0; }