c语言输入十进制(long),以二、八、十六进制输出的程序

int main()
{
char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int c[64],d,i=0,base;
long n;
printf("enter a number:\n"); scanf("%ld",&n);
printf("enter new base:\n"); scanf("%d",&base);
do
{
c[i]=n%base;
i++; n=n/base;
}while(n!=0);
printf("transmite new base:\n");
for(--i;i>=0;--i)
{
d=c[i];
printf("%c",b[d]);
}
}
看的有点乱 谁解释下 数组能明白

这个程序写的真不错,很简明,标记一个。
他的算法思想在于:先采用除“base”取余(所有的余数都会小于“base”),然后,再按这些余数的倒序输出就完成了数据的10进制与其它进制的转换。(如果你理解10转二进制,以上话你就能明白)
char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //这里是定义一个字符数组,用来输出余数表示的值
int c[64],d,i=0,base;
long n;
printf("enter a number:\n"); scanf("%ld",&n);
printf("enter new base:\n"); scanf("%d",&base);
do
{
c[i]=n%base;
i++; n=n/base;
}while(n!=0);

printf("transmite new base:\n");
for(--i;i>=0;--i)
{
d=c[i]; //以该余数为下标,去数组中找其对应的值。如5对应的就是‘5’ , 10就会对应A,当然只有超过10进制的base数,才会出现A以上的数值。
printf("%c",b[d]);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-20
n是需要转换的10进制数,base是目标进制(2,8,16)
以n=289,base=16为例,
循环中
第一次循环
i=0;
c[0]=289%16;//求个位数的值,c[0]=1,
i++;//i=1
n=289/16;//n=18

第二次循环

i=1;
c[1]=18%16;//求十位数的值,c[1]=2,
i++;//i=2
n=18/16;//n=1

第三次循环
i=2;
c[2]=1%16;//求百位数的值,c[2]=1,
i++;//i=3
n=1/16;//n=0结束循环

后面循环从--i;i=2
开始,输出c[2],c[1],c[0];
输出结果121;就是289转换成的16进制
第2个回答  2013-08-20
这个程序主发是考查对运算符的认知和使用,对主要的运算符应用句是:
c[i]=n%base;
在这句中,百分号 % 表示求模运算,作用是一个数学符号,和加+、减-、乘*、除/符号一样,进行数学运算,如果不是很清楚,看一下教材关于运算符的那部分。用求模运算,可以实现十进制对任意进制数的转换。
在程序其它部分出现百分号,是格式化符号,与这一句的百分号意义完全不同。
第3个回答  2013-08-20
十进制 转某进制,例如 2 进制,不断地用 “除以2 取余数”的方法就可以 得到。
例如:
十进制 11:
11 / 2 -- 得商 5 余 1 -- 取余数 1 -- 放入 c[0]
商5 / 2 -- 得商 2 余 1 -- 取余数 1 -- 放入 c[1]
商2 / 2 -- 得商 1 余 0 -- 取余数 0 -- 放入 c[2]
商1 / 2 -- 得商 0 余 1 -- 取余数 1 -- 放入 c[3]
商 0 结束。
写成 2 进制 为 1 0 1 1
输出 c[3],c[2],c[1],c[0] -- 1 0 1 1
程序就是描述此过程:
c[i] = n%base; 取余数
n=n/base; 求商,更新商。
----------------------------------
scanf("%ld",&n); -- 输入10进制数
scanf("%d",&base); -- 输入 2 或 8 或 16
i=0;
do
{ c[i]=n%base; 取余数
i++; // 做了几次取余数
n=n/base; 求商,更新商
}while(n!=0); // 直到商为0 结束。
for 循环 用于输出 字符转换。
二进制和八进制实际上不需要这么做。
16进制 用 b[d] 的“查表法”输出:
d=10 ,输出 b[10] -- 'A'
d=11 ,输出 b[11] -- 'B'
d=12 ,输出 b[12] -- 'C'
d=13 ,输出 b[13] -- 'D'
d=14 ,输出 b[14] -- 'E'
d=15 ,输出 b[15] -- 'F'
for(--i;i>=0;--i) 输出 次序:最后1个余数,倒数第2个余数,倒数第3个余数,...第一个余数。本回答被提问者采纳

c语言输入十进制(long),以二、八、十六进制输出的程序
{ d=c[i]; \/\/以该余数为下标,去数组中找其对应的值。如5对应的就是‘5’ , 10就会对应A,当然只有超过10进制的base数,才会出现A以上的数值。printf("%c",b[d]);}

...输入一个十进制数,转换为二,八,十六进制输出,用数组。 两个字符串...
你好,参考如下代码:include<iostream>using namespace std;#include "string.h"#include <stdlib.h>#include <stdio.h>\/\/10-15数字转换为字母char i2a(int val){ if(val<10 || val>15) return '0'+ val; const char* a = {"ABCDEF"}; return a[val-10];}int main()...

...个十进制数,将其转换为二进制、八进制和十六进制数。
{ int i;printf("enter a number");scanf("%d",&i);printf("\\n八进制为%o",i);printf("\\n十六进制为%x",i);}

...将其转化为二进制数,八进制数,十六进制数,并输出(要求用函数来实现...
char str3[256];itoa(L1, str1, 2);itoa(L1, str2, 8);itoa(L1, str3, 16);printf("2进制:%s\\n8进制:%s\\n16进制:%s\\n",str1,str2,str3);return 0;}

...从键盘输入一个十进制数,将其转换为二进制、八进制和十六进制...
\/\/应用程序 void func(int n,int m)\/\/n为十进制数,m为2,8,或16 { Stack S;InitStack(S);while(n!=0){ push(S,n%m);n=n\/m;} display(S);} void main()\/\/这用来测试func { int n=12,m=2;func(n,m);m=8;func(n,m);m=16;func(n,m);} \/\/已在vc2005中测试过,...

求高手写C语言程序代码:"从键盘输入一个十进制数,将其转换为二进制...
n\/16);showhex1(n%16);} else showhex1(n%16);} main(){ int a;printf("input a num:");scanf("%d",&a);printf("二进制: ");showbit(a);printf("\\n");printf("八进制: ");showoct(a);printf("\\n");printf("十六进制: ");showhex(a);printf("\\n");} ...

...输出其对应的二进制、三进制、四进制……十六进制数值。
=N[x%n];x\/=n;}for(i=total-1;i>=0;i--){p[total-1-i]=tmp[i];}if(total==0){p[0]='0';p[1]=0;}elsep[total-1-i]=0;}int main(){char s[100];\/\/用于存放转换的进制的数int i,x; printf("把一个数转换成2 3 4 ... 16进制数\\n");scanf("%d",&x);...

...一个十进制转换成二进制或八进制或十六进制的程序需要怎么打?_百度...
inttransfer(intx);intx;printf("请输入一个十进制数:");scanf("%d",&x);printf("转换成二进制数是:%d\\n",transfer(x));} inttransfer(intx){ intp=1,y=0,yushu;while(1){ yushu=x%2;x\/=2;y+=yushu*p;p*=10;if(x<2){ y+=x*p;break;} } returny;} ...

C语言编程,输入十进制数输出十六进制和八进制
const int index16 =16;int main(){int Array8[maxn];int Array16[maxn];int n, cot8 = 0;scanf("%d", &n);int m = n, cot16 = 0;while(n) {Array8[cot8++] = n % index8;n \/= index8;} while(m) {Array16[cot16++] = m % index16;m \/= index16;} int i;fo...

C语言编程,输入十进制数输出十六进制和八进制
"F");break;default: printf("%d",arr[i]);}printf("\\n\\n\\n"); } int main() {int num,choo; loop: printf("请选择功能:0.退出 1.十进制转二进制 2.十进制转八进制 3.十进制转十六进制\\n");scanf("%d",&choo);switch (choo){case 1:printf("请输入要转换的十进制数...

相似回答