本文目录一览:
C语言 十进制整数转换成base进制数
#include stdio.h
#include string.h
#include "stdlib.h"
#include conio.h
#define size 100
//定义一个栈
typedef struct
{
int x[size];
int top ;
}stack;
//栈初始化
void init(stack p){
p.top=0;
}
//入栈
int push(stack p,int e){
if (p.topsize)
{
p.x[p.top++]=e;
return 1;
}
return 0;
}
//出栈
int pop(stack p,int e){
if (p.top0)
{
e=p.x[--p.top];
return 1;
}
return 0;
}
//将 n进制数据转化为十进制表示
void td(char s[],int n,int num){
char *p;
int e;
p=s;
num=0;
while(*p){
if(*p='A') //16 进制转化
e=*p-'A'+10;
else
e=*p-'0';
p++;
num=num*n+e;
}
}
//将十进制转化为 m 进制
void tp(int num,int m,char s[]){ //
int n=0,e;
char *p;
stack b; init(b);
p=s;
while(num){ //将十进制数据逐位分离 压入栈中 此时 数据为倒序
n=num%m;
if(n9)
e=n-10+'A';
else
e=n+'0';
push(b,e);
num/=m;
}
while(pop(b,e)){ //从栈中取出元素,存入数组 s 中 此时 数据为顺序
*p=e;
p++;
}
*p='\0'; //在数组 尾部加结束标志
}
int check(char s[],int n){
char *p;
p=s;
if(n=10){
while(*p){
if(*p-'0'n)
return 1;
p++;
}
}
else if(n10){
while(*p){
if(*p='A'*p-'A'+10n)
return 1;
p++;
}
}
return 0;
}
void trans(char s[],int n,int m){
int *p,num;
td(s,n,num);
s[0]='\0';
tp(num,m,s);
}
void main(){
int n,m;
char s[size],c;
int fp=1; //是否结束的标志
do{
puts("\t\t\t数据的各个进制之间的转化\n");
s[0]='\0'; //数组初始化
printf("\n输入一个数据: "); gets(s); //读入数据 字符串型
printf("\b输入原来的进制 和 要转化的进制, 如 10-2 : ");
scanf("%d%c%d",n,c,m); //读入 进制转化 由 n进制转化为 m进制 输入形式 如:10-2 16-2
if(check(s,n)) { //判断是否合法
printf("\n\t错误 !输入的数据与进制不相配, 按任意键,继续输入。");
getch();
}
else{
printf("\n结果\n\t\t\t%d 进制 : %s ",n,s);
trans(s,n,m);//转化
printf("\n \t\t\t%d 进制 : %s \n\n",m,s); //输出 数据 字符串型
printf("\t\t\t继续输入 1, 退出输入 0: ");
scanf("%d",fp);
}
c=getchar(); //读取 回车键
system("cls");
}while(fp);
}
C语言十进制整数转换成base进制数
#includestdio.h
#includestring.h
main()
{
long n;
int base,i,a;
char s[100],*p,*q,t;
scanf("%ld%d",n,base);
for(i=0;;i++)
{
a=n%base;
n=n/base;
if(a10)
{
s[i]=a+'0';
}
else
{
s[i]=a-10+'A';
}
// 停止转换条件
if(n==0)
{
break;
}
}
s[i+1]='\0';/*这是我刚刚补上去的*/
// 高地位倒转
for(p=s,q=s+i;pq;p++,q--)
{
t=*p,*p=*q;*q=t;
}
puts(s);
}
C语言 可以解释解释这里是怎么实现转换成base进制的吗
给你举个例子吧 比如 -18 这个数是你要转换的数字 第一步 x= -18 if (x 0)这里假设你要转换的base是16进制的 也就是说base =16;
下面
{
x = (-1) * x;
}
这个执行后就是将x 换成正数,x现在就是 18 了
下来
remainder = x % base; //x和base相除,所得余数赋给变量remainder
/* 如果余数大于等于10,则将其转换为对应的字母,例如,10对应A,11对应B*/
if (remainder = 10)
{
remainder -= 10;
remainder += 'A';
}
/* 如果余数小于10,则将其转换为对应的数字字符,例如,整数0对应字符0*/
else
{
remainder += '0';
是转换的 现在 remainder = x % base 执行后 remainder =2 10 所以转换成'0'+2='2' (要是原来的数字是x=31 执行后 remainder =1510,执行的话 remainder =‘A’+15=‘p’ )
bb[k] 用来存放转换的数字 也就是说bb[0]现在是‘2’了。x=1
一直循环
下来的话b[1]='1'了x=0 循环结束b[2]='\0'因为字符串最后必须以‘\0’结尾才行 所以程序最后加了个bb[k] = '\0'; //给数组bb中的字符串添加一个字符串结束标志'\0'
懂了吧?