洛谷新手村P1055 ISBN号码(Scanf妙用)

错误代码如下,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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值