C语言求数字根的问题
数字根:
例如:234的数字根为2 + 3 + 4 = 9;238的数字根为:2 + 3 + 8 = 13, 1 + 3 = 4,则238的数字根为4。
/*------------------------------------------------------------
功能:求数字根
输入每行输入一个5000位以内的数字,可输入多行,最后一行以0结束;
输出每行为对应输入行的数字根。
输入示例:
24
39
128
356
10245
0
输出示例:
6
3
2
5
3
Author: Zhang Kaizhou
Date:2019-3-5 18:37:15
----------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 5000
typedef struct node{
char num[MAXSIZE];
struct node * pnext;
} Node;
void list_tail_insert(Node ** pphead, Node ** pptail, char * str);
void list_print(Node * phead);
void calculate_number_root(Node * phead);
int main(){
Node * phead = NULL, * ptail = NULL;
char str[MAXSIZE] = { 0 };
while(scanf("%s", str), strcmp(str, "0") != 0){
list_tail_insert(&phead, &ptail, str);
}
calculate_number_root(phead);
list_print(phead);
return 0;
}
void list_tail_insert(Node ** pphead, Node ** pptail, char * str){
Node * pnew = (Node *)calloc(1, sizeof(Node));
strcpy(pnew->num, str);
if(* pphead == NULL){
* pphead = pnew;
* pptail = pnew;
}else{
(* pptail)->pnext = pnew;
* pptail = pnew;
}
return;
}
void list_print(Node * phead){
while(phead != NULL){
printf("%s\n", phead->num);
phead = phead->pnext;
}
return;
}
void calculate_number_root(Node * phead){
int i, sum = 0;
char str[10] = { 0 };
while(phead != NULL){
for(i = 0; i < strlen(phead->num); i++){
sum += phead->num[i] - '0';
}
sprintf(str, "%d", sum); // 将一个整数转换成字符串
strcpy(phead->num, str);
if(sum >= 10){
calculate_number_root(phead);
}
sum = 0;
phead = phead->pnext;
}
return;
}
还没有评论,来说两句吧...