回复 20楼 水色苔
连试都不试就说不行,真搞笑
回复 21楼 linlulu001
。。。。我试过了啊
#include<stdio.h> #include<string.h> char mode(char b[4][20],int k); int main() { char a[4][20]={0}; int zushu,i,p,k,len[5]={0}; scanf("%d",&zushu); for(i=0;i<zushu;i++) { scanf("%s",&a[i]); len[i]=strlen(a[i]); } for(i=0,k=0;i<zushu;i++,k++) { if(len[i]==15) { for(p=14;p>=6;p--)//换位置 { a[i][p+2]=a[i][p]; } if(a[i][14]=='9'&&a[i][15]=='9'&&( a[i][16]=='6' || a[i][16]=='7' || a[i][16]=='8' || a[i][16]=='9' )) { a[i][6]='1'; a[i][7]='8'; } else { a[i][6]='1'; a[i][7]='9'; } a[i][17]=mode(a,k); printf("%s\n",a[i]); } else { if(len[i]==18&&a[i][17]==mode(a,k))printf("Valid\n"); else printf("Invalid\n"); } } return 0; } //加权,取模 char mode(char b[4][20],int k) { int t,q; t=0+20*k; q= (b[0][t++]-48)*7 + (b[0][t++]-48)*9 + (b[0][t++]-48)*10 + (b[0][t++]-48)*5 + (b[0][t++]-48)*8 + (b[0][t++]-48)*4 + (b[0][t++]-48)*2 + (b[0][t++]-48)*1 + (b[0][t++]-48)*6 + (b[0][t++]-48)*3 + (b[0][t++]-48)*7 + (b[0][t++]-48)*9 + (b[0][t++]-48)*10 + (b[0][t++]-48)*5 + (b[0][t++]-48)*8 + (b[0][t++]-48)*4 + (b[0][t++]-48)*2; switch(q%11) { case 0:t=49;break; case 1:t=48;break; case 2:t=88;break; case 3:t=57;break; case 4:t=56;break; case 5:t=55;break; case 6:t=54;break; case 7:t=53;break; case 8:t=52;break; case 9:t=51;break; case 10:t=50;break; } return t; }