CodeForces 375A Divisible By Seven

2014-11-24 07:22:03 · 作者: · 浏览: 0

将给的这一串数字 分成三部分,“1689”为一部分,0为一部分,其余的为一部分。

第三部分*10000对7取余 ,然后用“1689”这一部分的一种情况去中和第三部分的余数,最后把所有的0输出。

第一次做这种题,完全没有思路啊,全靠学长带了。。。。。

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #define LL long long using namespace std; char s[1001000]; char w[1001000]; bool mark[11]; int main() { memset(mark,false,sizeof(mark)); LL top = 0,sum = 0,i,Zero = 0; cin>>s; int len = strlen(s); for(i = 0;i < len; ++i) { if((s[i] == '1' || s[i] == '6' || s[i] == '8' || s[i] == '9') && mark[s[i]-'0'] == false) { mark[s[i]-'0'] = true; } else if(s[i] == '0') { Zero ++; } else { w[top++] = s[i]; } } for(i = 0;i < top; ++i) { sum *= 10; sum += (w[i]-'0'); sum %= 7; } sum *= 10000; sum %= 7; for(i = 0;i < top; ++i) { printf("%c",w[i]); } switch(sum) { case 0:printf("1869");break;// case 6:printf("1968");break; case 5:printf("1689");break;// case 4:printf("6198");break; case 3:printf("8691");break; case 2:printf("9861");break;// case 1:printf("8196");break;// } while(Zero--) { printf("0"); } cout<