问题描述
输入一个十进制整数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)要记得改过来,不然会输出超限