#18484: 求大神解釋這個為甚麼只有30%分數(長除法的方式)


0830david@gmail.com (David Wu)

學校 : 不指定學校
編號 : 81819
來源 : [42.73.135.157]
最後登入時間 :
2021-05-29 14:04:00
e293. 花開花落,雨初臨 | From: [140.126.196.29] | 發表日期 : 2019-07-17 16:56

#include<iostream>
#include<string>
using namespace std;
int main(){
int a,n,count,i,j,tencheck,hundredcheck,k[5000]={0},prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
string number;
bool shutup=true;
cin>>n;
for(n;n>0;n--){
cin>>number;
for(i=0;i<=3;i++){
for(j=0;j<number.size();j++){
k[j]=number[j]-48;
}
for(j=0;j<number.size();j++){
tencheck=k[j-1]*10+k[j];
if((k[j-1]==0||j==0)&&k[j]>=prime[i]){
k[j]=k[j]%prime[i];
}
else if(k[j-1]!=0&&j>0&&tencheck>=prime[i]){
k[j]=tencheck%prime[i];
}
}
if(k[j-1]==0){cout<<prime[i]<<" ";shutup=false;}
}
for(i=4;i<=24;i++){
for(j=0;j<number.size();j++){
k[j]=number[j]-48;
}
for(j=1;j<number.size();j++){
tencheck=k[j-1]*10+k[j];
hundredcheck=k[j-2]*100+k[j-1]*10+k[j];
if(k[j-2]==0&&tencheck>=prime[i]){
if(tencheck%prime[i]>=10){
k[j]=(tencheck%prime[i])%10;
k[j-1]=(tencheck%prime[i]-(tencheck%prime[i]%10))/10;
}
else{
k[j]=tencheck%prime[i];
k[j-1]=0;
}
}
else if(k[j-2]!=0&&j>=2&&hundredcheck>=prime[i]){
if(hundredcheck%prime[i]>=10){
k[j]=(hundredcheck%prime[i])%10;
k[j-1]=(hundredcheck%prime[i]-((hundredcheck%prime[i])%10))/10;
}
else if(hundredcheck%prime[i]==0){
k[j]=hundredcheck%prime[i];
k[j-1]=hundredcheck%prime[i];
k[j-2]=hundredcheck%prime[i];
}
else{
k[j]=hundredcheck%prime[i];
k[j-1]=0;
k[j-2]=0;
}
}
}
if(k[j-1]==0&&k[j-2]==0){cout<<prime[i]<<" ";shutup=false;}
}
if(shutup==true){cout<<"Terrible Silence...";}
cout<<endl;
}
}

 
ZeroJudge Forum