源代码:
#include <stdio.h>
#include <string.h>
#define MAX_LEN_OF_STRING 50
int main()
{
const int MIN_LEN_OF_NAME=10;
const int MAX_LEN_OF_NAME=24;
char name[MAX_LEN_OF_STRING]="";
char sn[MAX_LEN_OF_STRING]="";
char magicString[]="i am Bin Laden";
int lenOfName,
lenOfMagicString,
lastCharIndex,
lenOfSerial;
int i,j;
//录入用户名,确保符合长度
do{
printf("Plz input your name:");
scanf("%s", name);
lenOfName = strlen(name);
if(lenOfName < MIN_LEN_OF_NAME)
printf("Name should be at least %d characters!\r\n", MIN_LEN_OF_NAME);
else if(lenOfName > MAX_LEN_OF_NAME)
printf("Name should no more than %d characters!\r\n", MAX_LEN_OF_NAME);
else
goto goodway;
}while(1);
goodway:
strcat(name,magicString);
//下面的计算保证10位的用户名对应17位的序列号
lenOfMagicString = strlen(magicString);
lastCharIndex = lenOfName+lenOfMagicString-3;
for(i=0; i<26; i++)
{//穷举得到序列号第一位
if(((name[lastCharIndex]*(i+0x41)-i)%26)==0)
{
sn[0]=0x41+i;
break;
}
}
//每一位的计算都用到了第一位,然后用倒叙存储
for(i=1,j=lastCharIndex-1;
j>=5;
i++,j--)
sn[i]=((name[j]*sn[0])%26) + 0x41;
lenOfSerial = lastCharIndex - 5 + 1;
sn[lenOfSerial]='\0';
printf("The serial number is %s .\r\n", sn);
getch();
return 0;
}
代码的倒数第三句,getch();在编译时提示错误。
编译器我用的是《C—Free》
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课