题目链接:点击打开链接
这里要注意的是
1. long long 类型应该怎么输出
2. 题目的意思要准确地理解,有可能会出现11111111,这种边界情况,这个时候,这是要按照2进制来做的。所以要另外考虑。
解决方案:
/******************************************************************************/
/* */
/* DON'T MODIFY main() function anyway! */
/* */
/******************************************************************************/
#include <stdio.h>
#include <string.h>
void solve(); /* write function solve() to process one case of the problem */
void init(){}
int main()
{ int i,t; init();
scanf("%d\n",&t);
for (i=0;i<t;i++)
{ printf("case #%d:\n",i);
solve();
}
return 0;
}
void solve(){
char str[61];
int record[128];
int t[60];
int diffNum;
int base;
int i;
int length;
long long out = 0;
gets(str);
//if(strlen(str)==1){printf("0\n");return;}
diffNum=0;
for(i=0;i<128;i++){
record[i] = -1;//-1代表没有出现过ascii码对应于i的符号。
}
for(i = 0; i < strlen(str);i++){
if(record[str[i]] == -1){
diffNum++;
if(diffNum==1) record[str[i]] = 1;
else if(diffNum==2) record[str[i]] = 0;
else {
record[str[i]] = diffNum-1;
}
}
}
base = diffNum; //意思是base的进制,但是对于diffNum=1的时候,要另外处理。
if(base < 2) base = 2;
//根据我们设置好的顺序进行替换,得到数字串
for(i = 0;i < strlen(str);i++){
t[i] = record[str[i]];
}
//我们暂时不考虑1进制的情况。
length = strlen(str);
for(i=0;i < length;i++){
out = out*base + t[i];
}
printf("%I64d\n",out);
}