c++实现十进制到十六进制的转换

#include<iostream.h>

void f(int n)
{
int n1;
if(n/16) f(n/16); //A
n1=n%16;
if(n1>=0&&n1<=9)
cout<<n1;
else
switch(n1)
{
case 10:cout<<"A"; break;
case 11:cout<<"B"; break;
case 12:cout<<"C"; break;
case 13:cout<<"D"; break;
case 14:cout<<"E"; break;
case 15:cout<<"F"; break;
}
}

void main(void)
{
int n;
cout<<"请输入一个十进制数:";
cin>>n;
f(n);
cout<<endl;
}
A处注释怎么调用的呢?比如说我输入一个十进制数31,里面怎样循环调用的呢?
两块糖高手来:要晕,比如说n=31,我怎么感觉输出应该是F1,帮忙理解一下,分给你了,快来再解释一下

第1个回答  2008-10-19
这个部分是一个递归调用的过程,一直到n/16 == 0条件,执行过程中n的值也就是函数的形参的值是n = n / 16。条件结束时其实就是你的值是16进制的低4个字节,n1是高四个字节。

比如,n = 31 / 16 = 1余15
此时n = 1 ,作为函数形参再进函数。n = 15 / 16 = 0余15
那么递归结束,n = 1;n1 = 15;
所以答案就是1F

其实就是说,你现在用的是递归,所以你调用的是整个的程序,而不是说程序的一部分,当你的if成立的情况,就有一个n1的值,而且向下执行,执行完函数,在调用,这个其实就是递归的作用了。呵呵

谢谢你的信任,我就好好给你深入讲讲。
1.输入31,那么程序运行到注释那一行,进入if后,31除16=1,满足条件,所以调用自身,这时系统记录一下n值和内存地址,因为这一次程序没有运行完,又调用自身了,所以我们记录为断点1.

2.满足if条件后调用自身,子程序第二次进入。此时的n值为1,1除16 = 0,条件不满足,所以不进入if,程序向下执行,直到完了。这次的n1的值为1.

3.但程序到此并没有结束,程序回到断点1处接着执行,n值为1,程序继续从断点处执行,得到n1为15。所以答案是1F

这些其实是递归的算法了。本回答被提问者采纳
第2个回答  2008-10-16
void f(int n)
{
int n1;
if (n ==0)
return;

n1 = n % 16;
f(n/16);
switch(n1)
{
case 10:cout<<"A"; break;
case 11:cout<<"B"; break;
case 12:cout<<"C"; break;
case 13:cout<<"D"; break;
case 14:cout<<"E"; break;
case 15:cout<<"F"; break;
default: cout<<n1; break;
}
}

用C++如何编程十进制转换成十六进制的程序,谢谢!
void convfrom10tok(int ,int );void main(){ int k,m;cout<<"输入要转换的进制数(2,8,16...):";cin>>k;\/\/直接改为K=16即可实现十进制转换为十六进制 cout<<"输入一个10进制数:";cin>>m;convfrom10tok(m,k);cout<<"对应的"<<k<<"进制数:"<<endl;\/*for(i=n-1;i...

C语言十进制转十六进制数
C语言十进制转十六进制数的源代码如下:include<bits\/stdc++.h> using namespace std;void IntZh0x(int n){int s=n%16;if(n\/16!=0) IntZh0x(n\/16);if(s>9){ if(s==15) cout<<"F";else if(s==14) cout<<"E";else if(s==13) cout<<"D";else if(s==12) cout<<"C"...

c++用函数实现十进制数到十六进制数的转换
itoa(int i,char *string,16)直接转换 这个还不简单啊,i对应的就是你的输入数,string就是输出的16进制

用C++链栈编辑十进制对十六进制的转化
printf("请输入你要转换的数字:"); scanf("%d",&num); top=(LinkStack*)malloc(sizeof(LinkStack)); IniStack(top); while(num!=0)

c++中10进制数转为16进制数的程序
不用100分,很简单!使用输出流中的控制符 十进制:dec 十六进制:hex 八进制:oct 举例188 程序如下 include <iostream> using namespace std;int main(){ int a=188;cout<<hex<<a<<endl;return 0;}

c++10进制转16进制,我看了自己写的代码好久,找不出错来
我没能看懂你的代码,但是十进制数转换十六进制数应该是很简单的,它就是反复除16,直至商为0,然后反向取余数。include<iostream>using namespace std;static int ResultHex[100]; \/\/ 用于保存十六进制结果void OuputHex(int RH[100],int len) \/\/ 输出十六进制{ while (len>=0) { swit...

用C++编写十进制数转十六进制,并返回为十六进制数对应的ASCII码形式...
include <iostream>#include <string>using namespace std;char dec2hex(int num){char ch;if (num%16 < 10)ch = num%16 + '0';elsech = num%16 - 10 + 'A';return ch;};string getBuffer(int num,int kind){string str("00H00H");int n;switch(kind){case 1:n = num \/...

用c++编写递归将十进制转换为十六进制
这个和十进制转成二进制很像 假设这个十进制数为n 就是不断取模,除以十六。。。一直到n==0 下面的是递归求解 include <stdio.h>#include <iostream>using namespace std;int n,cnt=0;char num[10];void dfs(int x){ if(x\/16!=0) dfs(x\/16); if((x%16)<10) num[++cnt]=...

c++十进制转十六进制输出到数组的实现?
a1\/=16;cishu++;} \/\/多少位数把每位数填进数组 int[] num=new int[cishu];a1=a-a%16;\/\/就是被16整除的数 int zhong=0,i=0;while(a1>0){ int begin=a1;a1\/=16;int end=a1;zhong=begin-end*16;num[i]=zhong;i++;} num[0]=a%16;\/\/遍历num for(int j=0;j<cishu;j++...

基于C++语言编程,如何把int型的数值10,转换为16进制格式的0x10,而不...
这个要求很少见的说,这样凡是带a-f的16进制数就无法传输了 不过可以实现 convert函数实现这样的功能,main为测试函数,可以不管 include <stdio.h>int convert(int a){int i = 0, ret = 0;int t;while(a){t = a%10;ret |= t<<(i*4);a\/=10;i ++;if(i > 8) break;}return ret...

相似回答