#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define SIZE 1024
void nixu(int* p)
{
int *p1 = p;
int *p2 = p + sizeof(p)/sizeof(p[0]) - 1;
while (p1 < p2)
{
int tmp = *p1;
*(p1++) = *p2;
*(p2--) = tmp;
}
}
int get_zifu(char* p, int j, char* ch)
{
int i = 0;
while(ch[j]!='\n' && i<16)
{
p[i++] = ch[j++];
}
return j;
}
int get_math(int a)
{
if(a < 0)
{
a = -a;
get_math(a);
}
if (a < 10)
{
return a;
}
int sum = 0;
while(a > 0)
{
sum += a%10;
a = a/10;
}
get_math(sum);
}
int main()
{
char ch[SIZE] = {0};
int q[17] = {0};
printf("Please enter a string\n");
fgets(ch,SIZE-1,stdin);
int j = 0;
while(j < strlen(ch) - 1)
{
char p[17] = {0};
j = get_zifu(p, j, ch);
int i = 0;
while(p[i]!='\0')
{
int a = get_math(p[i] - '0' + q[i]);
q[i] = a;
i++;
}
}
int i=0;
while(q[i])
{
i++;
}
printf("The result of the conversion of the string is\n");
if(i < 16)
{
int j = 16 - i;
while(j-- > 0)
{
printf("0");
}
}
nixu(q);
i = 0;
while(q[i])
{
printf("%d",q[i++]);
}
printf("\n");
return 0;
}
这个题目完成的是输入一个字符串,然后将该字符串改为一串16位的数字。
这道题,首先我们需要先将字符串存入一个数组里面,然后从第一个字符开始取字符,每取到16个字符就进行一次计算。
将该字符转化成ASCII码的值,如果其中有多位的数字,那么进行各个位数加算。
我们另外建立一个长度为16的数组,每次进行操作的时候就将输入字符数组的16位放进去。
在另外定义一个数组用来存放最后要得到的16位数。
每次进行操作,都会将字符转换成一个ASCII值,然后不停的取余,进行加算。
这里面我用了一个递归函数进行判断最后得到的数是否为10以内的。
先判断是否为正,不为正则取反计算。
递归函数的退出条件显然是其小于10的时候,当其大于10 的时候要不停的进行取余相加。