麻了鸭,写了一大堆就10分,求大佬帮我看看哪里错了QAQ
#include <bits/stdc++.h>
using namespace std;
string Number;
int Each[102];
int flag;//用于储存x所在位置(应分为在最后一位和不在最后一位两种)
int len;
int Way;//表示处理方法
int Judger(int position)//position:表示读入的位置
{
if (position == len)//如果等于最后一位
return 1;
else if (position != len )
return 2 ;
}
int Change_qumo(int x)//x待取模数字
{
x=x*9;
x=x%10;
return x;
}
int Sum_each(int a)//超过10的处理(下属于Change函数)
{//现在a是肯定大于10小于20的,所以我们需要将a的各个数位单独取出来
int gewei,shiwei;
shiwei = ( a / 10 ) % 10;
gewei = a % 10 ;
return ( gewei + shiwei );
}
void Get_each(string a,int length)//对于读入的卡号进行取出每一位数字处理
{
for (int i=0;i<=length-1;i++)
{
if (a[i] == 'x')
{
flag = i+1;
Way = Judger(flag);//将判断的结果储存到Way中(1:在最后一位 2:不在)
continue ;
}
Each[i+1] = int (a[i])-48;
}
}
int Change_2()//大题思路:和Change_1基本一致,但最后判断的时候需要一个一个穷举
{
int sum,temp;
int panduan ;
int result;
for(int i=len-1;i>=1;i-=2)//从倒数第二位开始,累加2倍当前数位的数位和
{
if (i == flag)
{
panduan = 1;
continue;
}
temp = Each[i] * 2;
if (temp>=10)
sum += Sum_each(temp);
else
sum += temp;
}
for(int i=len-2;i>=1;i-=2)
{
if (i == flag)
{
panduan = 2;
continue;
}
sum+=Each[i];
}
if (panduan == 1)
{
int a;
int b = sum;
int temp_ans;
for (int i=0;i<=9;i++)
{
b = sum;
a=Sum_each(i);
b +=a;
temp_ans = Change_qumo(b);
if (temp_ans == Each[len])
result = 1;
else if (i==9&&temp_ans!=Each[len])
result = 2;
else
continue;
}
}
if (panduan == 2)
{
int a;
int b = sum;
int temp_ans;
for (int i=0;i<=9;i++)
{
b = sum;
a= i;
b +=a;
temp_ans = Change_qumo(b);
if (temp_ans == Each[len])
result = 1;
else if (i==9&&temp_ans!=Each[len])
result = 2;
else
continue;
}
}
}
int Change_1()//在最后一位时 计算所有数字经过处理后得到的结果(已经取模处理)
{
int sum,temp;
for(int i=len-1;i>=1;i-=2)//从倒数第二位开始,累加2倍当前数位的数位和
{
temp = Each[i] * 2;
if (temp>=10)
sum += Sum_each(temp);
else
sum += temp;
}
for(int i=len-2;i>=1;i-=2)
sum+=Each[i];
int a = Change_qumo(sum);
return a;
}
int panduan()
{
int a;
if (Way == 1)
a = Change_1();
else if (Way == 2)
a = Change_2();
return a;//返回得出的答案
}
int main ()
{
cin>>len;
cin>>Number;
Get_each(Number,len);
int ans = panduan ();
cout<<ans;
}