PAT (Basic Level) Practice (中文)1022 D进制的A+B (20分)

1022 D进制的A+B (20分)

输入两个非负 10 进制整数 A 和 B ( ≤ 2​30​​ −1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:
输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

总结

  1. 进制转换问题,用链表的数据结构,采用头插法建表,做出类似栈的结构
  2. 第3个测试用例是0 0 2,测试你的代码是否有判断链表为空的情况
  3. 头插法建表时,要对main函数里的head指针修改,传参时应该传二级指针
#include <stdio.h>
#include <stdlib.h>

typedef struct _node{
	int value;
	struct _node *next;
}Node;

void
initlist( Node** head );

void
N_number( int sum, int d,  Node **head );

void
printlist( Node *head );

int
main( int argc, char **argv )
{
	int a, b, d;
	Node *head;
	scanf("%d%d%d", &a, &b, &d );

	initlist( &head );
	N_number( a + b, d, &head );
	printlist( head );

	return 0;
}


void
initlist( Node** head )
{
	( *head ) = ( Node* )malloc( sizeof( Node ) );
	( *head )->next = NULL;
}

void
N_number( int sum, int d,  Node **head )
{
	Node *p;
	while( sum > 0 ){
		p = ( Node* )malloc( sizeof( Node ) );
		p->value = sum % d;
		p->next = *head;
		*head = p;
		sum /= d;
	}
}

void
printlist( Node *head )
{
	Node *temp;
	if( head->next != NULL ){
		for( head; head->next != NULL; head = temp ){
			printf("%d", head->value );
			temp = head->next;
			free( head );
		}
	}else{
		printf("0");
	}
	free( head );
}
posted @ 2020-06-23 00:19  LanceHansen  阅读(23)  评论(0编辑  收藏  举报