不能用字符串,那可以两个办法,一是一个大整数,二是getchar逐个字符接收处理,没说不让用字符吧?不过题意应该是大整数。17位,用long long就可以了
int main()
{
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
long long n;
scanf("%lld",&n);
long long a = n;
int m = n%10;
n = n/10;
long long t = pow(10.0,16);
int k = 16;
int sum = 0;
while(n>0)
{
int s;
switch(k)
{
case 16:
s = 7;
break;
case 15:
s = 9;
break;
case 14:
s = 10;
break;
case 13:
s = 5;
break;
case 12:
s = 8;
break;
case 11:
s = 4;
break;
case 10:
s = 2;
break;
case 9:
s = 1;
break;
case 8:
s = 6;
break;
case 7:
s = 3;
break;
case 6:
s = 7;
break;
case 5:
s = 9;
break;
case 4:
s = 10;
break;
case 3:
s = 5;
break;
case 2:
s = 8;
break;
case 1:
s = 4;
break;
case 0:
s = 2;
break;
}
sum += n/t*s;
n%=t;
t/=10;
k--;
}
sum%=11;
int M = 0;
if(sum == 0)
M = 1;
else if(sum == 1)
M = 2;
else if(sum >= 3)
M = 12-sum;
if(M == m)
printf("%lld Passed",a);
else
printf("%lld Fail",a);
printf("\n");
}
}
啥玩意啊,题目也没说不让使用你说的那些类型啊