墨痕正在帮你高速加载哦 . . .


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…

您的喜欢是作者写作最大的动力!❤️
  • AliPay
  • WeChatPay
  • QQPay
Donate

 评论


Copyright 2019-2021 Mohen's blog MOE ICP 萌ICP备 20217103号 正在载入...

UV
PV
WordCount18.5k