1513 - 又一版 A+B
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
Input
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
Output
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
Examples
Input
2 4 5 8 123 456 0
Output
1001 1103
Hint
注意输入的两个数相加后的结果可能会超过int和long的范围。
Solution C
#include <stdio.h> #include <stdlib.h> void numchange(unsigned int m,unsigned int num) { unsigned int u,v,count = 0; int i; char *p = (char *)malloc(sizeof(char)); if(num == 0) { printf("0\n"); } else { while(num) { v = num % m; u = num / m; *(p+count) = v + '0'; num = u; count ++; p = (char *)realloc(p,sizeof(char)*(count+1)); } *(p+count) = '\0'; for(i=count-1;i>=0;i--) { printf("%c",*(p+i)); } printf("\n"); free(p); } } int main(void) { unsigned int m; unsigned int A,B; scanf("%d",&m); while(m) { scanf("%u%u",&A,&B); numchange(m,A+B); scanf("%u",&m); } return 0; }
Solution C++
#include<stdio.h> void change(long long s,long long m) { if(s) { change(s/m,m); printf("%lld",s%m); } } int main() { long long a,b,m,s; while(scanf("%lld",&m),m) { scanf("%lld%lld",&a,&b); s=a+b; if(s==0) printf("0"); else change(s,m); printf("\n"); } return 0; }
Hint
注意输入的两个数相加后的结果可能会超过int和long的范围。