用C语言:十进制数n(正数)转换成Base(2<=Base<=36)进制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言:十进制数n(正数)转换成Base(2<=Base<=36)进制相关的知识,希望对你有一定的参考价值。
输入格式
待转换的数值的个数
待转换的数值 基数
……
待转换的数值 基数
输出格式
第2行输入值转化后的结果[对应的基数]
第3行输入值转化后的结果[对应的基数]
……
样例输入
5
2147483647 16
123 8
77 2
9966 10
12345 12
样例输出
7FFFFFFF[16]
173[8]
1001101[2]
9966[10]
7189[12]
现在只学了顺序、选择、循环、函数、数组。
请不要用指针和递归。
我是大一的,比入门菜鸟强一点的新手水平
const int maxn = 1024;
int main()
int n;
scanf("%d", &n);
while(n--)
int num, index;
scanf("%d %d", &num, &index);
int array[maxn], cot = 0;
while(num)
array[cot++] = num % index;
num /= index;
int i;
for(i = cot - 1; i >= 0; i--)
if(array[i] >= 10)
printf("%c", array[i] - 10 + 'A');
else
printf("%d", array[i]);
printf("[%d]\\n", index);
return 0;
追问
要求一次性输入数据,然后再把结果一次性打印出来。
追答#include<stdio.h>const int maxn = 1024;
int main()
int n;
scanf("%d", &n);
int i, Num[maxn], Index[maxn];
for(i = 0; i < n; i++)
scanf("%d %d", &Num[i], &Index[i]);
for(i = 0; i < n; i++)
int array[maxn], cot = 0;
int num = Num[i];
int index = Index[i];
while(num)
array[cot++] = num % index;
num /= index;
int i;
for(i = cot - 1; i >= 0; i--)
if(array[i] >= 10)
printf("%c", array[i] - 10 + 'A');
else
printf("%d", array[i]);
printf("[%d]\\n", index);
return 0;
参考技术A //#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
void Int10All(int n,char radix)
char m;
if(n>=radix) Int10All(n/radix,radix);
if((m=n%radix+'0')>0x39) m+=7;
printf("%c",m);
void main(void)
int a[30][2],i,n;
printf("How many times(<30)?\nn=");
scanf("%d",&n);
printf("Enter decimal numbers and transformation radix:\n");
for(i=0;i<n;i++)
scanf("%d%d",&a[i][0],&a[i][1]);
printf("-----------\n");
for(i=0;i<n;printf(" [%d]\n",a[i++][1]))
Int10All(a[i][0],a[i][1]);
参考技术B 临时为你写的程序,不知道可以不,你看看
#include<stdio.h>
#include<string.h>
void fun(int num,int base,char result[80]);
void main()
int i,n,num,base;
char result[80];
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("1:");
scanf("%d%d",&num,&base);
fun(num,base,result);
printf("%d=%s [%d]\n",num,result,base);
getch();
void fun(int num,int base,char result[80])
int n,i,j,t;
n=0;
while(num)
result[n]=num%base;
if(result[n]<10) result[n]+='0';
else result[n]+='A';
num/=base;
n++;
result[n]='\0';
for(i=0,j=strlen(result)-1;i<j;i++,j--)
t=result[i];result[i]=result[j];result[j]=t;
return 0;
c语言编写一程序,以字符串形式输入十进制数,将字符串对应的十进制数转换成二进制数,将得到的结果输出。
字符串长度20位以上都可以实现。
我是初学者 刚学了数组和函数
#define N 100
void main(void)
int c=0,i,j,k,a[N];
long num;
char A,B,C,D,E,F;
printf("please input the number of you want to conversion\n"); /*输入要转换的十进制数*/
scanf("%ld",&num);
printf("\nplease input the number of scale\n"); /*输入要转换成几进制的数1-16*/
scanf("%d",&k);
for(j=0;j<N;j++)
a[j]=num%k; /*取余数赋值给数组a的成员*/
num=num/k; /*对数值num求商数,使其在下次循环时有一个新的值*/
if(num<k) /*当所要num的值小于要转换的进制数时跳出循环*/
continue;
c++; /*利用一个变量来计数,使下面输出数组进程可以有一个明确输出位数范围*/
for(i=c+1;i>=0;i--) /*倒输数组a,原理是数学的“除n取倒商法”*/
if(a[i]==10) /*十六进制中以字母ABCDEF代替9以上数字,所以在满足条件时输出字母代替10、11、12等数字*/
printf("%c",65);
else if(a[i]==11)
printf("%c",66);
else if(a[i]==12)
printf("%c",67);
else if(a[i]==13)
printf("%c",68);
else if(a[i]==14)
printf("%c",69);
else if(a[i]==15)
printf("%c",70);
else
printf("%d",a[i]); /*若没有大于9的数字,则按整形数据输出*/
getch();
参考技术A #include<stdio.h>
char intToChar(const int intValue)
switch(intValue)
case 1: return '1';
case 2: return '2';
case 3: return '3';
case 4: return '4';
case 5: return '5';
case 6: return '6';
case 7: return '7';
case 8: return '8';
case 9: return '9';
case 0: return '0';
default: return '\0';
int charToInt(const char cValue)
switch(cValue)
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
case '0': return 0;
default: return 0;
/**
* 子函数用于获取字符数组除2的余数,同时数组将改变为商
* arrayLen 输入参数 字符数组的长度
* array 输入参数 字符数组(字符数组在子函数自动退化为指针)
* return 返回0或1表示除2的余数,-1表示输入的字符串已经全为0了
**/
int getRemainder(const int arrayLen, char* array)
int flag = 0; // 退位标识
int oldInt; // 除2前的数值
int newInt; // 除2后的数值
bool isZero = true;
int i; // 用来计数
// 遍历数组,从第一位除到最后一位,然后返回最后余数
for (i = 0; i < arrayLen; i++)
oldInt = charToInt(array[i]) + (flag * 10);
if (oldInt > 0)
isZero = false;
newInt = oldInt / 2;
flag = oldInt % 2;
array[i] = intToChar(newInt);
if (isZero)
return -1;
else
return flag;
int main()
const int MAX_ARRAY_SIZE = 50;
char decimalArray[MAX_ARRAY_SIZE+1];
int i; // temp variable for cycle
char c; // temp variable for getchar
printf("Please input the decimal. The char, which is not digital, means valid end.\n");
for (i = 0; (i < MAX_ARRAY_SIZE) && ((c = getchar()) >= '0') && (c <= '9'); i++)
decimalArray[i] = c;
decimalArray[i] = '\0'; // very important, Prevent cross-border
const int dArrayLen = i;
printf("The valid input is %s\n", decimalArray);
printf("------------begin translate------------\n");
int remainValue = 0; //
char binaryArray[MAX_ARRAY_SIZE * 3 + 1];
for (i = 0; remainValue != -1; i++)
remainValue = getRemainder(dArrayLen, decimalArray);
binaryArray[i] = intToChar(remainValue);
if (remainValue != -1) // 因为除2取余函数是验证输入是否全零,不加这个判断最后会多输出一行无意义信息
printf("after %d's divide by 2, the decimal array is %s\n", i + 1, decimalArray);
const int binaryLen = i;
printf("--------------end translate------------\n");
printf(" The correspond binary is: ");
for (i = binaryLen - 1; i >= 0; i--)
printf("%c", binaryArray[i]);
printf("\n");
return 0;
以上是关于用C语言:十进制数n(正数)转换成Base(2<=Base<=36)进制的主要内容,如果未能解决你的问题,请参考以下文章