详细程序代码如下:()保存代码时,以.C为后缀名.在VC6.0下编译(TC2.0也可,但不能显示汉字)#include#include#include/********************************定义一个联合体Z,long double 是10字节,故用c1,c2....c10与其对应,使结构体ch与first共占同一内存区,这样就可以实现题中的要求。************************************/union Z{ long double first;/*这部分用于数学算术运算*/ struct ch/*这部分用于对字符进行运算*/ {unsigned char c1;unsigned char c2;unsigned char c3;unsigned char c4;unsigned char c5;unsigned char c6;unsigned char c7;unsigned char c8;unsigned char c9;unsigned char c10; }C;};unsigned char userName[]="12345678";/*用户名*/union Z myZ;/*定义一个Z变量myZ(相当于你题中所说的z)*/long double y=333;long double registerNumber;/*即a,为要求计算的值*/main(){ int strLen; int i; myZ.C.c1='w';/*设置myZ的初值为 woainini */ myZ.C.c2='o'; myZ.C.c3='a'; myZ.C.c4='i'; myZ.C.c5='n'; myZ.C.c6='i'; myZ.C.c7='n'; myZ.C.c8='i'; myZ.C.c9=0;/*高位没有就赋0*/ myZ.C.c10=0; strLen=strlen(userName);/* 先计算名字长度*/ for(i=strLen-1;i>=0;i--)/*从名字最后一个向第一个进行计算*/ {y=myZ.first-333%(int)userName;/*ASCII强制转化为数值型*/myZ.first+=myZ.first+y;/*累加*/ } registerNumber=myZ.first; printf("用户名为:%s\n",userName); printf("注册码是:%X\n",registerNumber);/*以十六进制大写输出*/ getch();}看明白了,不过快下班了!改天有空,还没人答的时候我再来答,先收藏起来
|