zoukankan      html  css  js  c++  java
  • 洛谷 简单字符串 'P1055ISBN号码' 问题

    题目描述如下:

    知识点①:char数组与int型数字进行运算时,需要将 char[i]-'0' 。比如

        char c[5];
        int i;
        for(i=0;i<5;i++)
        scanf("%c",&c[i]);
        printf("%d",c[0]);

    当输入c[0] = 5时,以%d形式输出c[0] ,输出结果为 53,所以在进行运算是需要减去48。

    注意①:在进行简单的数组运算时,一定要保证下标的计算正确,不要出现低级错误。

    我的题解(只有80分):

    #include <stdio.h>
    int main(){
        char ISBN[30];
        int i = 0, j = 0, t;
        int sub = 0;
        for(i = 0; i < 14; i++){
            scanf("%c", &ISBN[i]); 
        }
        for(i = 0; i <= 11; i++){
            if(i!=1 && i!=5 && i!=11){
                j+=1;
                sub = sub + j * (ISBN[i]-'0'); 
            }
        }
        t = sub%11;    
        if(t == (ISBN[12]-'0')){
            printf("Right");
            return 0;
        }    
        if(t == 10){
            ISBN[12] = 'X';
            for(i = 0; i <= 12; i++)
            printf("%c", ISBN[i]);
            return 0;
        }
            ISBN[12] = t+'0';
            for(i = 0; i <= 12; i++)
            printf("%c", ISBN[i]);
        return 0;            
    } 

    优质题解:

    #include <stdio.h>//代码简洁明了(个人观点)
    int main(void){
      char a[14], mod[12] = "0123456789X"; //先将mod11后的十一个字符存入数组
      gets(a); //输入字符串
      int i, j = 1, t = 0;
      for(i = 0; i < 12; i++) {
            if(a[i] == '-') continue; //字符串为分隔符‘-’时跳过此次循环进入下一次循环
        t += (a[i]-'0')*j++; //t储存 第j个  数字  * j 的和
      }
      if(mod[t%11] == a[12]) printf("Right");
      else {
          a[12] = mod[t%11]; //若识别码错误,则赋正确的识别码,然后输出
          puts(a);
      }
      return 0;
    }

     ------来源于洛谷作者:小k 

    定义了一个mod数组,一共有11个值,"0123456789X" ,

    a[12] = mod[t%11]; //若识别码错误,则赋正确的识别码,然后输出
  • 相关阅读:
    日报10.29
    日报10.28
    日报10.27
    周进度总结-6
    日报10.25
    日报10.23
    日报10.22
    日报10.21
    日报10.18
    STL bitset
  • 原文地址:https://www.cnblogs.com/epep/p/10883898.html
Copyright © 2011-2022 走看看