SDUT_2502:火星计数法
2015-04-19 18:20 星星之火✨🔥 阅读(181) 评论(0) 收藏 举报火星人的计数规则里只有a,b,c,d四个字母,计数规则从小到大是 a,b,c,d,aa,ab,ac,ad,ba,……。
给出来由a,b,c,d四种字母组成的火星数字,算出该数字是第几个(从1开始)。
输入
第一行输入一个数T代表测试用例组数(T<=200),接下来T组测试用例,每组测试数据为一个火星数字(长度小于100)。
输出
对于每组测试用例,输出该火星数字代表多少(结果对10000007取模)。每行输出一个结果。
示例输入
2
a
ab
示例输出
1
6
分析:从标题本身就能看出来,该题属于进制转换类型的。类比十进制计数法,我们知道1234 = 1*1000 +2*100 + 3*10 + 4; 或者更加适合程序语言描述的方式1234 = ( ( ( 1*10+2)*10+3 )*10) + 4。因此,对于四进制我们有:
#include<stdio.h>
#include<string.h>
#define MOD 10000007
int main(void)
{
int n, ans, len;
char str[110];
scanf("%d", &n);
while(n--)
{
scanf("%s", str);
len = strlen(str);
ans = 0;
for(int i = 0; i < len; i++)
ans = (ans*4 + str[i] - 'a' + 1) % MOD;
printf("%d\n", ans);
}
return 0;
}