PAT1022 D进制的A+B 一个测试点不通过

#include
void fun( int n, int d ) {
int r;
if( n ) {
fun( n / d, d );
r = n % d;
printf( "%d", r );
}
}
int main() {
int a, b, d;
scanf( "%d%d%d", &a, &b, &d );
int sum = a + b;
fun( sum, d );
return 0;
}

图片说明

为什么呢为什么呢??

http://blog.csdn.net/sunbaigui/article/details/8657103

如果是错误点3的话,没有考虑到A+B为0的情况

因为31位二进制数要有最多31位二进制位去表示,如1111111111111111111111111111111。但是我们输出的时候是用伪二进制去输出的,实际是十进制。所以int型最多可以表示9位数,longlong最多表示18位,是不够的。所以要用数组来解题。我说的是测试点2和4