大佬帮忙看一下我最后一块代码为什么错了

P1055 [NOIP2008 普及组] ISBN 号码

彬腾向前冲 @ 2021-08-17 18:32:50

#include <bits/stdc++.h>

using namespace std;

int main ()
{
     char a[20]; char c;
     cin >> a ; 

     int n = 0,sum = 0;

     for (int i = 0 ; i < 11 ; i ++){
     if (a[i]!='-') {
         n ++ ;
         a [i] = a[i] - '0';
         sum += n * a[i]; 
        }
     }  

      sum %= 11 ;

     if (sum == 10) c = 'X' ;
     else c = sum + '0' ;

     if (c == a[12]) cout << "Right" ;
     else {
          a[12] = c; 
          cout << a;
   }
   return 0 ;
}

大佬帮忙看一下我最后一块代码为什么错了 输出不了 调了一会了 就最后一步错了


by WZY718605 @ 2021-08-17 18:40:18

#include <bits/stdc++.h>

using namespace std;

int main ()
{
     char a[20]; char c;
     cin >> a ; 

     int n = 0,sum = 0;

     for (int i = 0 ; i < 11 ; i ++){
     if (a[i]!='-') {
         n ++ ;
         //a [i] = a[i] - '0';
         sum += n *(a[i]-'0'); 
        }
     }  

      sum %= 11 ;

     if (sum == 10) c = 'X' ;
     else c = sum + '0' ;

     if (c == a[12]) cout << "Right" ;
     else {
          a[12] = c; 
          cout<<a;
   }
   return 0 ;
}

第十五、十六行改了一下


by 彬腾向前冲 @ 2021-08-17 18:43:57

@WZY751205 这儿为什么错了 qwq


by WZY718605 @ 2021-08-17 18:49:03

a[i]减去一个字符零肯定会变的,你可以去查一下ascll码表

比如说a[i]='3',对应ascll的值是51,51减去48是三,这时候在输出a[i]就不是‘3’了


by WZY718605 @ 2021-08-17 18:50:38

sum += n *(a[i]-'0'); 

这里没有改变a[i]的值,不影响输出


|