首页 > 其他 > 详细

洛谷 简单字符串 'P1055ISBN号码' 问题

时间:2019-05-17 22:21:45      阅读:138      评论:0      收藏:0      [点我收藏+]

题目描述如下:

技术分享图片

知识点①: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]; //若识别码错误,则赋正确的识别码,然后输出

 

洛谷 简单字符串 'P1055ISBN号码' 问题

原文:https://www.cnblogs.com/epep/p/10883898.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!