整数拆分成各位(续)
上次的程序有诸多错误,比如C语言不支持参数初始化等。所以修改了一下,再增加一种,现在有三种方法。
法一:顺序表法
法二:sprintf函数
法三:链表法
下面是代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct NODE/*构造一个链表节点*/
{
struct NODE *link;
int value;
} Node;
void decimal_divide_1(unsigned int value, char *arr)
{
unsigned int value_length, i;/*value_length数字总共位数,i循环标志*/
value_length = (char)log10(value);/*获取位数*/
for(i=0;i<=value_length;i++)
{
*(arr + value_length - i) = value % 10;/**/
value /= 10;
}
}
void decimal_divide_2(unsigned int value, char *arr)
{
int i = 0;
sprintf(arr, "%d", value);/*用sprintf将数字打印到arr中*/
while(arr[i] != '\0')/*字符串的有效值减去‘0’即为真值*/
{
arr[i] -= '0';
i += 1;
}
}
Node *decimal_divide_3(unsigned int num)/*返回值是root地址的值*/
{
Node *current = NULL;
while(num)
{
Node *newone;
newone = (Node*)malloc(sizeof(Node));
newone->value = num % 10;
newone->link = current;
current = newone;
num /= 10;
}
return current;
}
链接math.h是用了log()函数计算十进制位数(这个有待考虑)。stdlib.h是因为malloc()函数。stdio.h是sprintf()函数。