只要想到了就很容易了,由于7是个素数,它的余数0~6,那么我们只需要把1,6,8,9,前面不过多小数,其余数必定在(0~6),所以任意排序(1,6,8,9)满足加上(0~6)的余数能被7整除就行了,这就靠自己与凑了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int cnt[10];
const int num[]={1869,1896,1986,1698,6198,1689,1968};
char st[1000005];
int main()
{
while(scanf("%s",st)!=EOF){
int len=strlen(st);
memset(cnt,0,sizeof(cnt));
for(int i=0;i<len;i++){
cnt[st[i]-'0']++;
}
cnt[1]--;
cnt[6]--;
cnt[8]--;
cnt[9]--;
int carry=0;
for(int i=1;i<=9;i++){
for(int j=0;j<cnt[i];j++){
putchar(i+'0');
carry=(carry*10+i)%7;
}
}
carry=carry*10000%7;
printf("%d",num[carry%7]);
for(int i=0;i<cnt[0];i++) putchar('0');
puts("");
}
return 0 ;
}