将A+B转换为指定进制数
前言
进制转换是典型的栈的应用,特别是用数组实现的顺序栈就更简单了,随便ac了一个九度的题目,记录一下吧
-
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
题目描述:
-
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
输入:
-
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
输出:
-
8 1300 48 2 1 7 0
样例输入:
-
2504 1000
样例输出:
AC代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define max_size 1000 struct stack { int data[max_size]; int top; }; void initStack(struct stack *); void pushStack(struct stack *, int ); int popStack(struct stack *); int main() { unsigned int m, num; unsigned long int a, b, plus, remainder; struct stack *pstack; pstack = (struct stack *)malloc(sizeof(struct stack)); while(scanf("%d", &m) != EOF && m != 0) { scanf("%ld %ld", &a, &b); //初始化 plus = a + b; initStack(pstack); //考虑a+b=0的情况 if(plus == 0) { pushStack(pstack, 0); } //求m进制数 while(plus) { remainder = plus % m; pushStack(pstack, remainder); plus /= m; } //打印输出 while(pstack->top > 0) { num = popStack(pstack); printf("%d", num); } printf("\n"); } return 0; } void initStack(struct stack *s) { s->top = 0; } void pushStack(struct stack *s, int data) { if(s->top < max_size + 1) { s->data[s->top ++] = data; } } int popStack(struct stack *s) { if(s->top > 0) { return s->data[-- s->top]; } }