zoukankan      html  css  js  c++  java
  • Codeforces Round #221 (Div. 2) C. Divisible by Seven(构造 大数除法 )

    上几次的一道cf题。

    题目:http://codeforces.com/contest/376/problem/C

    性质:

    (4)a与b的和除以c的余数(a、b两数除以c在没有余数的情况下除外),等于a,b分别除以c的余数之和(或这个和除以c的余数)。例如,23,16除以5的余数分别是3和1,所以(23+16)除以5的余数等于3+1=4。注意:当余数之和大于除数时,所求余数等于余数之和再除以c的余数。例如,23,19除以5的余数分别是3和4,所以(23+19)除以5的余数等于(3+4)除以5的余数。
    (5)a与b的乘积除以c的余数,等于a,b分别除以c的余数之积(或这个积除以c的余数)。例如,23,16除以5的余数分别是3和1,所以(23×16)除以5的余数等于3×1=3。注意:当余数之积大于除数时,所求余数等于余数之积再除以c的余数。例如,23,19除以5的余数分别是3和4,所以(23×19)除以5的余数等于(3×4)除以5的余数。

    题目给出的 1 6 8 9的组合正好能构成%7后的 0 1 2 3 4 5 6的余数,所有根据上面的性质,可以

    分两种情况,

    1、除了1 6 8 9外都是0的情况,这时把1 6 8 9放到前面(性质5)

    2、除了1 6 8 9外还有其他的非0数的情况,这时可以吧1 6 8 9放到后面(性质4)

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <algorithm>
     6 using namespace std;
     7 
     8 char s[1000005];
     9 int num[1000005];
    10 char f[8][5]={"1869","1968","1689","6198","1698","1986","1896"};
    11 int main()
    12 {
    13     int len,i,ant;
    14     int a[20];
    15     while(~scanf("%s",s))
    16     {
    17         ant=0;
    18         len=strlen(s);
    19         for(i=0; i<len; i++)
    20         {
    21             num[i]=s[i]-48;
    22         }
    23         memset(a,0,sizeof(a));
    24         for(i=0; i<len;  i++)
    25         {
    26             if(num[i]==1&&a[1]==0)
    27             {
    28                 num[i]=0; a[1]=1;
    29             }
    30             if(num[i]==6&&a[6]==0)
    31             {
    32                 num[i]=0; a[6]=1;
    33             }
    34             if(num[i]==8&&a[8]==0)
    35             {
    36                 num[i]=0; a[8]=1;
    37             }
    38             if(num[i]==9&&a[9]==0)
    39             {
    40                 num[i]=0; a[9]=1;
    41             }
    42         }
    43         sort(num,num+len);
    44         for(i=len-1; i>=0; i--)
    45         {
    46             ant=ant*10+num[i];
    47             ant%=7;
    48         }
    49         if(num[len-1]==0)    //情况1
    50         {
    51         printf("%s",f[(7-ant)%7]);
    52         for(i=0; i<len-4; i++)
    53         printf("0");
    54         printf("
    ");
    55         }
    56         else               //情况2
    57         {
    58             for(i=len-1; i>=4; i--)
    59             printf("%d",num[i]);
    60             printf("%s",f[(7-ant)%7]);
    61             printf("
    ");
    62         }
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    java_监控工具jvisualvm
    bzoj3667: Rabin-Miller算法
    bzoj3677: [Apio2014]连珠线
    4070: [Apio2015]雅加达的摩天楼
    4069: [Apio2015]巴厘岛的雕塑
    4071: [Apio2015]巴邻旁之桥
    bzoj2653: middle
    1500: [NOI2005]维修数列
    bzoj4262: Sum
    bzoj4540: [Hnoi2016]序列
  • 原文地址:https://www.cnblogs.com/bfshm/p/3504763.html
Copyright © 2011-2022 走看看