將給的這一串數字 分成三部分,“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<