A. c語言 進制轉換
最難理解的應該是ttor()這個函數。也不知道怎麼講,就拿6轉換成二進制來舉例子吧。
ttor(6,2){
ttor(3,2){
ttor(1,2){
ttor(0,2){
printf("%c",(0%2)+'0');
}
printf("%c",(1%2)+'0');
}
printf("%c",(3%2)+'0');
}
printf("%c",(6%2)+'0');
}
這樣看,程序從最里層輸出,完全符合十進制轉換成二進制的方法。
」 n % r > 9 ? n % r - 10 + 'A' : n % r + '0' 「這句話中,三目運算符的優先順序最低,更直觀的看可以寫成 (n % r > 9) ?( n % r - 10 + 'A') :( n % r + '0') ,其中用數字加'A'和『0』,就會的到相應的字元,比如(2+『0』)就是字元'2',2+'A'就是字元'C'這是根據ASCII編碼換算的,而整個表達式的意思,就是如果余數小於9就用數字字元表示,如果余數大於9就用字母字元表示,這符合16進制的寫法。
B. C語言用基礎的方法將一個數轉變為任一進制的數。
#include<stdio.h>
//將十進制的n轉換為k進制的字元串
char*Change(unsignedn,intk,charnum[]){//要求k<=36
inti=0,t;
while(n){
t=n%k;
if(t>9)num[i]='A'+t-10;
elsenum[i]=t+'0';
n/=k;
++i;
}
num[i]=0;
returnnum;
}
intmain(){
chars[50];
intn,k,T;
scanf("%d",&T);
while(T--){
printf("要轉換的數:");
scanf("%d",&n);
printf("轉換的目標進制數:");
scanf("%d",&k);
printf("%u:%s
",n,Change(n,k,s));
}
return0;
}
C. c語言的進制轉換問題
#include<stdio.h>
main()
{
int
a,i,p;
printf("輸入1、2或3(1代表8進制,2代表10進制,3代表16進制)\n");
scanf("%d",&i);
if(i==1)
{
printf("輸入所轉換為的進制2或3(1代表8進制,2代表10進制,3代表16進制)\n");
scanf("%d",&p);
if(p==2)
{
/*
[缺花括弧]*/
scanf("%o",&a);
printf("%d\n",a);
}
/*
[缺花括弧]*/
if(p==3)
{
/*
[缺花括弧]*/
scanf("%o",&a);
printf("%x\n",a);
}
/*
[缺花括弧]*/
}
else
if(i==2)
{
printf("輸入所轉換為的進制1或3(1代表8進制,2代表10進制,3代表16進制)\n");
scanf("%d",&p);
if(p==1)
{
/*
[缺花括弧]*/
scanf("%d",&a);
printf("%o\n",a);
}
/*
[缺花括弧]*/
if(p==3)
{
/*
[缺花括弧]*/
scanf("%d",&a);
printf("%x\n",a);
}
/*
[缺花括弧]*/
}
else
{
/*
[缺花括弧]*/
printf("輸入所轉換為的進制1或2(1代表8進制,2代表10進制,3代表16進制)\n");
scanf("%d",&p);
if(p==1)
{
/*
[缺花括弧]*/
scanf("%x",&a);
printf("%o\n",a);
}
if(p==2)
{
/*
[缺花括弧]*/
scanf("%x",&a);
printf("%d\n",a);
}
/*
[缺花括弧]*/
}
/*
[缺花括弧]*/
}
/*
以上是改正的程序,
後面跟著
[缺花括弧]
就是原程序中缺花括弧錯誤;
程序大體思路沒有錯。就是缺了點花括弧而已;
另外,樓主你用1,2,3代表8,10,16。。不直觀,相信你自己檢查的時候都頭暈吧?
這個題目用switch可能會好一點;switch內嵌套if語句。
*/
D. 用c語言編寫十進制轉化二進制
#include <stdio.h>
void d2n(unsigned long d,int n)
{
if(d>=n)
{
d2n(d/n,n);
}
printf("%c","0123456789ABCDEF"[d%n]);
}
int main()
{
unsigned long d;
int n;
scanf("%lu",&d);
d2n(d,2);
return 0;
}
E. C語言中如何用演算法實現進制間的轉化
C語言中實現10進制轉換為任意進制的過程為:
定義數組int rs[32],保存轉換後的數據,整數的轉換結果最多32位(4位元組*8位)
定義一個數組char map[]={'0','1','2','3',...,'9','A','B',...'F'},完成相應數值對應的轉換後的字元
輸入10進制數(整數)num
轉入轉換進制基數(2-16)ind
循環對num進行模ind運算,得到余數存儲到數組rs中
num縮小ind倍
當num為0時結束循環
反向輸出數組rs中對應的各元素對應的map字元,得到轉換結果
參考代碼:
#include<stdio.h>
intmain()
{
charmap[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
inti,c[32],num,ind;
do{printf("inputnum:");scanf("%d",&num);}while(num<0);
do{printf("inputind:");scanf("%d",&ind);}while(ind>16||ind<2);
i=0;
do{
c[i++]=num%ind;
num/=ind;
}while(num!=0);
for(i--;i>=0;i--)
printf("%c",map[c[i]]);
printf(" ");
return0;
}
運行結果:
input num: 100
input ind: 2
1100100
input num: 100
input ind: 8
144
input num: 100
input ind: 16
64
F. C語言進制轉換
支持zpfloveyfy的分析,程序風格也很好。
我在這給個數制轉換的公式:
十進制數N和其他d進制數的轉換基於以下公式:
N
=
(N
div
d)
*
d
+
N
mod
d;
其中:div為整除,mod為求余。
例如將10進制1348轉化成2504,運算過程如下:
N
Ndiv8
Nmod8
1348
168
4
168
21
0
21
2
5
2
0
2
看起來有點亂,因為這里會把原來的格式給打亂。
由最後一列4052可以看出,正好是結果2504的倒數,所以用棧來實現它是最理想不過的了。
G. 在c語言中用最簡單的方法把十進制轉化為十六進制
代碼如下:
#include"stdio.h"
intmain()
{
intnum=0;
inta[100];
inti=0;
intm=0;
intyushu;
charhex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("請輸入一個十進制整數:");
scanf("%d",&num);
while(num>0)
{
yushu=num%16;
a[i++]=yushu;
num=num/16;
}
printf("轉化為十六進制的數為:0x");
for(i=i-1;i>=0;i--)//倒序輸出{
m=a[i];
printf("%c",hex[m]);
}
printf("
");
}
程序運行結果:
(7)c語言進制基礎轉化擴展閱讀
C語言中,十進制轉換十六進制,可以先輸入十進制整數,然後去拼十六進制,十六進制由數字 0~9、字母 A~F 或 a~f(不區分大小寫)組成,使用時必須以0x或0X(不區分大小寫)開頭,只需把二進制除以16得到余數去上面定義的hex[16]數組進行取值接可以得到轉換的數字。
H. 任意進制數的轉換c語言
任意進制數轉換為十進制,可以用 strtol()函數。
函數定義:
long int strtol(const char *nptr,char **endptr,int base);
見 網頁鏈接 網路。
十進制轉換為任意進制,可以用itoa()函數。
// itoa 例子
#include<stdio.h>
#include<stdlib.h>
intmain(){
inti;
charbuffer[33];
printf("Enteranumber:");
scanf("%d",&i);//輸入整數i
itoa(i,buffer,10);//將i轉化為10進制數,存到buffer中
printf("decimal:%s
",buffer);//輸出列印buffer
itoa(i,buffer,16);//將i轉化為16進制數,存到buffer中
printf("hexadecimal:%s
",buffer);//輸出列印buffer
itoa(i,buffer,2);//將i轉化為2進制數,存到buffer中
printf("binary:%s
",buffer);//輸出列印buffer
return0;}
I. C語言 進制轉化
這種計數的方法就是BCD碼,即4位二進制數用來表示十進制的1位。如果收到的是字元串,下面程序轉化,如果非字元串,請再追問。
#include<stdio.h>
int getBCD(unsigned char *s) { int xx; xx=s[2]*10+s[3]; return xx; }
void main()
{ unsigned char process[4]={ '0','x','1','4' };
int x;
x=getBCD(process);
}
J. c語言十進制轉化為十六進制原理
十進制數 由 0到9 組成, 逢10 進1, 各個位的權 是 10 的 i 次方,整數部分 i 從 0 起算。小數部分 i 從 -1 起算。
十六進制 由 0到十五組成,逢16進1,各個位的權 是 16 的 i 次方,整數部分 i 從 0 起算。小數部分 i 從 -1 起算。
十六進制 的十到十五用 a,b,c,d,e,f 表示。
整數部分,十進制 轉化為十六進制 可以用 不斷地 除以16 「取余數」 的方法 得到。
小數部分,十進制 轉化為十六進制 可以用 不斷地 乘16「取整數」的 的方法 得到。
例如:十進制 17852.5 轉化為十六進制,
17852/16 = 1115 余 12 -- c
1115/16 = 69 余 11 -- b
69/16 = 4 余 5
4/16 = 0 余 4
整數部分 得16進制: 45bc
.5 * 16 = 8.0 取 8 余 0
小數部分 得16進制: .8
合起來 0x45bc.8
c 語言程序 printf("%x", 17852); %x格式 輸出 16進制: 45bc 可用於轉換整數。