洛谷 简单字符串 '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]; //若识别码错误,则赋正确的识别码,然后输出
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!