题目描述
On the planet Zoop, numbers are represented in base 62, using the digits 0,
1, . . . , 9, A, B, . . . , Z, a, b, . . . , z where A (base 62) = 10 (base 10)
B (base 62) = 11 (base 10) . . . z (base 62) = 61 (base 10). Given the digit
representation of a number x in base 62, your goal is to determine if x is
divisible by 61.
输入
The input test file will contain multiple cases. Each test case will be given
by a single string containing only the digits ‘0’ through ‘9’, the uppercase
letters ‘A’ through ‘Z’, and the lowercase letters ’a’ through ’z’. All strings
will have a length of between 1 and 10000 characters, inclusive. The
end-of-input is denoted by a single line containing the word “end”, which should
not be processed.
输出
For each test case, print “yes” if the number is divisible by 61, and “no”
otherwise.
样例输入
1v3
2P6
IsThisDivisible
end
样例输出
yes
no
no
提示In the first example, 1v3 = 1 × 622 + 57 × 62 + 3 = 7381, which is
divisible by 61. In the second example, 2P6 = 2 × 622 + 25 × 62 + 6 = 9244,
which is not divisible by 61.
显然,提示是错误的,不过没关系,不影响我们做题
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;int get_num(char x)
{
if (x>=‘0‘ && x<=‘9‘) return x-‘0‘;
if (x>=‘A‘ && x<=‘Z‘) return x-‘A‘+10;
if (x>=‘a‘ && x<=‘z‘) return x-‘a‘+36;
}int main()
{
char str[10000+10];
int ans,temp;
while (scanf("%s",str)!=EOF && strcmp("end",str)!=0)
{
int L=strlen(str);
ans=0;
temp=1;
for (int i=L-1;i>=0;i--)
{
ans+=(get_num(str[i])*temp)%61;
ans=ans%61;
temp=(temp*62)%61;
}
if (ans%61) printf("no\n");
else printf("yes\n");
}
return 0;
}
作者 chensunrise
hust 1062 Divisibility,布布扣,bubuko.com