错误代码如下,WA声一片片。
原因,没有考虑首位数字为0的情况。
方法:修改本程序的设计,改为使用数组存储每位数字。
一个比较巧妙的解决方法:
//根据scanf的特性
scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9],&t1);
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int a,b,c;
char d;
scanf("%d-%d-%d-%c",&a,&b,&c,&d);
int sum;
sum=a*1+(b/100)*2+((b%100)/10)*3+(b%10)*4;
sum+=(c/10000)*5;
sum+=((c/1000)%10)*6;
sum+=((c/100)%10)*7;
sum+=((c/10)%10)*8;
sum+=(c%10)*9;
sum%=11;
if(d=='x'||d=='X'){
if(sum==11){printf("Right");}else{printf("%d-%d-%d-%d",a,b,c,sum);}
}
if(((int)d-48)==sum){printf("Right");}
else{
if(sum==11){printf("%d-%d-%d-X",a,b,c);}else{printf("%d-%d-%d-%d",a,b,c,sum);}
} return 0;
}
正确示范:
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
char a[10];
char last;
scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&last);
int sum=0;
for(int i=0;i<=8;i++){
sum+=(((int)a[i])-48)*(i+1);
}
sum%=11;
char ch1;
if(sum==10){
ch1='X';
}else{ch1=sum+'0';}
if(ch1==last){printf("Right");}
else{printf("%c-%c%c%c-%c%c%c%c%c-%c",a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],ch1);}
return 0;
}