把一串字符转化为16位数
程序员文章站
2022-05-29 15:46:21
...
// 将任意长度的字符串 转化 16 位的数字
// safhlasjfaksfkasfksahfkahsfkahfksajfkashfkashf
// 4124124154352431
// 换算算法:
// 将字符串以 长度 16 为一组进行对齐,相同位的字符相加,得到一个数
// 如果这个数不是个位数,则将这个数的各个位进行相,一直到为个位数为止
// s f h l a s j f a k s f k a s
// f k s a h f k a h s f k a h f k
// s a j f k a s h f k a s h f
// 123 46 23 678 98 234 ....
// 6 1 5 3 8 9 ...
#include <stdio.h>
//将字符转化为数字
int transform(char a)
{
return a - 'a' + 97;
}
//把一个数各位相加(并且要小于10)
//*************************************
int addnum(int num)
{
int sum = 0;
if(num <= 9)
{
sum = num;
return sum;
}
if(num > 9)
{
while(num > 0)
{
int a;
a = num%10;
sum += a;
num = num/10;
}
return sum;
}
}
int transformnum(int num)
{
int sum = addnum(num);
if(sum >9)
{
sum = addnum(sum);
}
if(sum >9)
{
sum = addnum(sum);
}
return sum;
}
//*********************************
int main()
{
char str[1024];
printf("请输入一串字符\n");
scanf("%s", str);
int i;
int num;
int count = 0;
char *p = str;
int sum[16] = {0};
int a[16] = {0};
while(*p)
{
num = transform(*p);
if(count % 16 == 0)
{
count = 0;
}
sum[count] += num;
a[count] = sum[count];
a[count] = transformnum(a[count]);
count++;
p++;
}
printf("转换后的16位数字是:\n");
for(i = 0;i < 16; i++)
{
printf("%d", a[i]);
}
printf("\n");
return 0;
}
推荐阅读