lg1055传送门

这是一道非常水的题!(毕竟第一题)

算法可能就是模拟和字符串吧!

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <bits/stdc++.h>
using namespace std;
char c[14]; //储存字符
int a[10],ans; //a储存数字
char tot;
int main()
{
freopen("isbn.in","r",stdin); //流输入输出
freopen("isbn.out","w",stdout);
for(int i=1;i<=13;i++) //从1开始
cin>>c[i];
a[1]=c[1]-'0'; //以下为字符转整形
a[2]=c[3]-'0';
a[3]=c[4]-'0';
a[4]=c[5]-'0';
a[5]=c[7]-'0';
a[6]=c[8]-'0';
a[7]=c[9]-'0';
a[8]=c[10]-'0';
a[9]=c[11]-'0';
tot=c[13]; //13为判断依据单独存(以字符存储)
for(int i=1;i<=9;i++)
ans=a[i]*i+ans; //按题意计算出第13位
ans=ans%11;
if(ans!=10) //判断是否余数为10
{
if(ans==tot-'0') //如果相等直接输出RIGHT
cout<<"Right";
else //错误则输出正确的ISBN号码
{
cout<<a[1]<<'-';
for(int i=2;i<=4;i++)
cout<<a[i];
cout<<'-';
for(int i=5;i<=9;i++)
cout<<a[i];
cout<<'-'<<ans;
}
}
else //为10
{
if(tot=='X') //是X
cout<<"Right";
else //不是X
{
cout<<a[1]<<'-';
for(int i=2;i<=4;i++)
cout<<a[i];
cout<<'-';
for(int i=5;i<=9;i++)
cout<<a[i];
cout<<'-'<<'X';
}
}
}

所以又水了一篇题解!

emmm…


注意:文章最终版权归墨痕所有,如要引用请告知,谢谢!

 评论


Copyright 2019 Mohen's blog | 博客内容仅供学习和研究使用,版权归作者所有

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

次访问 | 人次 | 字数统计:14.1k
载入天数...载入时分秒...

BY-NC-SA 4.0