zcmu 1755(大數問題)
阿新 • • 發佈:2018-11-18
題目連結:http://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1755
思路:大數相減,取餘,注意前導零和大小關係。
#include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; void sp(string &s1,string &s2) { int l1=s1.length(),l2=s2.length();//cout<<s1.length()<<" "<<s2.length()<<endl; string tmp; if(l1>l2) tmp=s1,s1=s2,s2=tmp; else if(l1==l2) { int fg=0; for(int i=0;i<l1;i++) if(s1[i]>s2[i]) { fg=1;break; } if(fg) tmp=s1,s1=s2,s2=tmp; } } string minu(string s1,string s2) { int cnt,i,j,l1=s1.length(),l2=s2.length(); string s3; for(i=l2-1,j=l1-1;i>=0;i--,j--) { cnt=s2[i]-(j>=0?s1[j]:'0'); if(cnt<0) { cnt+=10; if(i>0) s2[i-1]--; } s3+=(cnt+'0'); } i=l2-1; while(s3[i]=='0') i--; if(i<0) return "0"; s2.clear(); for(;i>=0;i--) s2+=s3[i]; return s2; } int pd(string s) { int l=s.length(),i,cnt=0; for(i=0;i<l;i++) { cnt=cnt*10+s[i]-'0'; cnt=cnt%17; } if(cnt==0) return 1; else return 0; } int main(void) { string s1,s2,tp; while(cin>>s1) { if(s1=="0") break; s2.clear();tp.clear(); int i,l=s1.length(); int cnt=(s1[l-1]-'0')*5; //cout<<cnt<<endl; //s1.pop_back(); //cout<<s1<<endl; for(i=0;i<l-1;i++) tp+=s1[i]; s1=tp; s2+=(cnt/10+'0'); s2+=(cnt%10+'0'); sp(s1,s2); //<<s1<<" "<<s2<<endl; s1=minu(s1,s2); if(s1=="0") { cout<<0<<endl;continue; } //cout<<s1<<endl; if(pd(s1)==1) cout<<1<<endl; else cout<<0<<endl; } return 0; }