本文目錄一覽:
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’
懂了吧?
原創文章,作者:DGNR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141231.html