Mình có thuật toán sau :
1. Lấy mã ASCII từng ký tự chuỗi Name cộng dồn lại với nhau --> Lưu vào một biến (ví dụ : default_value)
2. Sau đó, lấy giá trị này * chiều dài chuỗi Name --> Lưu vào biến dafault_value
3. Lấy ký số đầu tiên của default_value cộng với default_value tính ở bước 2) . Tất cả nhân cho 16
Code của em viết như sau (viết bằng MFC Visual C++)
Code:
char rea_UserName[70]={0};
char rea_RegCode[40]={0};
unsigned int a[40];
int LenName=0;
int i=0;
unsigned int default_value=0;
LenName=GetDlgItemText(IDC_EdtName,rea_UserName,70);
if (LenName < 1 || LenName >64)
{
MessageBox("----------===== Your name at least 1 chart and not over 64 chart =====-------- ","Oh !! Please enter User name again !! ");
}
else
{
//Bước 1 : Lay ma ASCII cua tung ky tu chuoi Name
while (i<LenName)
{
default_value = default_value + rea_UserName[i];
i++;
}
//Bước 2 : Lay gia tri cuoi cung * voi chieu dai chuoi Name
default_value = default_value * LenName;
//Bước 3 : Lay ký số đầu tiên của default_value
....
wsprintf (rea_RegCode,"%d",default_value);
SetDlgItemText(IDC_EdtRegCode,rea_RegCode);
}
Em đã làm được bước 3 theo cách sau :
Code:
unsigned int Temp = default_value;
int j=0;
while (save !=0)
{
a[j++]=save % 10;
save = save/10;
}
default_value = (default_value + a[j-1])*16;
Nhưng cách này hơi ngược ngạo vì khi chia lấy phần dư lưu vào mảng số nguyên thì nó sẽ đảo ngược lại con số ban đầu. Ví dụ :
default_value = 14364
mảng a[] = 4 6 3 4 1
vì thế muốn lấy ký số đầu tiên của default_value bây giờ chính là lấy phần tử cuối cùng của mảng a (a[j-1])
Bây giờ mình muốn làm theo kiểu string tức là :
Code:
- Chuyển default_value thành dạng chuỗi
- Sau đó lấy phần tử đầu tiên của chuỗi này
- Chuyển phần tử này thành số
thì phải làm sao ?
Mong các bạn giúp đỡ dùm mình !