进制转换中当待转换数据为负数的时候该怎么写

问题描述
输入一个十进制整数N,将它转换成R进制数输出。

输入
输入数据包含多个测试实例,每个测试实例包含两个整数N和R(2<=R<=36).

输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,16用G表示等等)。

输入样列
7 2
23 12
-4 3

输出样例
111
1B
-11
这个代码可以转换正数,但是负数转化不了

#include<stdio.h>
#include<string.h>
void fun(int n,int th,char a[])
{
    char t;
    int len,k,i;
    i=0;
    do{
        k=n%th;
        if(k>=-9&&k<=-1){
            a[i]=-(k+'0');
        }
        else if(k>=0&&k<=9){
            a[i]=k+'0';
        }
        else{
            a[i]=k-10+'A';
        }
        n=n/th;
        i++;
    }while(n!=0);
    a[i]='\0';
    len=strlen(a);
    for(i=0;i<len/2;i++){
        t=a[i];
        a[i]=a[(len-1)-i];
        a[(len-1)-i]=t;
    }
} 
int main()
{
    int n,th;
    char str[100];
    while(1){
        scanf("%d%d",&n,&th);
        fun(n,th,str);
        puts(str);
    }
    return 0;
}


#include<stdio.h>
#include<string.h>
void fun(int n, int th, char a[])
{
    char t;
    int len, k, i;
    i = 0;
    int IS = 0;
    if (n<0)    //负数需要标记出来,最后进行单独处理
    {
        IS = 1;
        n = -n;
    }
    do {
        k = n % th;
        if (k >= -9 && k <= -1) {
            a[i] = k + '0';
        }
        else if (k >= 0 && k <= 9) {
            a[i] = k + '0';
        }
        else {
            a[i] = k - 10 + 'A';
        }
        n = n / th;
        i++;
    } while (n != 0);
    if (IS==1)  //负数需要额外添加符号
    {
        a[i] = '-';
        i++;
    }
    a[i] = '\0';
    len = strlen(a);
    for (i = 0; i < len / 2; i++) {
        t = a[i];
        a[i] = a[(len - 1) - i];
        a[(len - 1) - i] = t;
    }
}
int main()
{
    int n, th;
    char str[100];
    while (1) {
        scanf("%d%d", &n, &th);
        fun(n, th, str);
        puts(str);
    }
    return 0;
}


 #include<stdio.h>
#include<string.h>
void fun(int n, int th, char a[])
{
    char t;
    int len, k, i;
    i = 0;
    int IS = 0;
    if (n<0) 
    {
        IS = 1;
        n = -n;
    }
    do {
        k = n % th;
        if (k >= -9 && k <= -1) {
            a[i] = k + '0';
        }
        else if (k >= 0 && k <= 9) {
            a[i] = k + '0';
        }
        else {
            a[i] = k - 10 + 'A';
        }
        n = n / th;
        i++;
    } while (n != 0);
    if (IS==1)
    {
        a[i] = '-';
        i++;
    }
    a[i] = '\0';
    len = strlen(a);
    for (i = 0; i < len / 2; i++) {
        t = a[i];
        a[i] = a[(len - 1) - i];
        a[(len - 1) - i] = t;
    }
}
int main()
{
    int n, th;
    char str[100];
    while (~scanf("%d%d", &n, &th)) {
        fun(n, th, str);
        puts(str);
    }
    return 0;
}
 

while(1)要记得改过来,不然会输出超限