/* 函数fun的功能是:将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
void fun(unsigned m , unsigned k)
*/
#include <stdio.h>
void fun(unsigned m,unsigned k);
void main(void)
{
unsigned int m,k;
scanf("%u%u",&m,&k);
fun(m,k);
}
void fun(unsigned m,unsigned k)
{
unsigned int a[4],i=0,j;
while(m%k!=0)
{
a[i]=m%k;
m=m/k;
i++;
}
for(j=0;j<=i;j++)
printf("%u",a[i-j]);
printf("\n");
}
我的思路是根据十转K进制是除K取余法`````
取得的余数放到一个数组中````除到最后无法再除的时候```
输出则由数组逆输出``不过我运算的结果不行
问题出在哪``
是不是数组上?数组后面没用到的单元是垃圾值还是0?
----------------解决方案--------------------------------------------------------
#include <stdio.h>
void fun(unsigned m,unsigned k);
void main(void)
{
unsigned int m,k;
scanf("%u%u",&m,&k);
fun(m,k);
}
void fun(unsigned m,unsigned k)
{
unsigned int a[4],i=0,j;
while(m>=k)
{
a[i]=m%k;
m=m/k;
i++;
}
-----------------------------------------------a[i]=m;
for(j=0;j<=i;j++)
printf("%u",a[i-j]);
printf("\n");
}
通过 ~~
楼主可以结贴了
----------------解决方案--------------------------------------------------------
循环条件有问题吧,应该是等于0的啊,不然你的循环就只能做一次啊,还有就是把M,K做为参数,像写的那样传递好象不太合法哦
----------------解决方案--------------------------------------------------------
不对``你这样只能做结果只有四个的数``一旦超过会出错的````
----------------解决方案--------------------------------------------------------
void fun(unsigned m,unsigned k)
{
unsigned int a[4],i=0,j;
while(m%k!=0)//这个循环条件不对.
{
a[i]=m%k;
m=m/k;
i++;
}
for(j=0;j<=i;j++)
printf("%u",a[i-j]);
printf("\n");
}
while(m)
{
a[i++]=m%k;
m/=k;
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>
void fun(unsigned m,unsigned k);
void main(void)
{
unsigned int m,k;
scanf("%u%u",&m,&k);
fun(m,k);
}
void fun(unsigned m,unsigned k)
{
unsigned int a[4],i=0,j;
while(m>=k)
{
a[i]=m%k;
m=m/k;
i++;
}
-----------------------------------------------a[i]=m;
for(j=0;j<=i;j++)//想想会不会越界.
printf("%u",a[i-j]);
printf("\n");
}
通过 ~~
楼主可以结贴了
----------------解决方案--------------------------------------------------------
一个十进制转化其他进制(2,8,16,32)的小程序.
#include<iostream>
using namespace std;
void trans(int,int);
void main()
{
int n,sel;
cout<<"输入一个整数:";
cin>>n; //输入一个整数
do
{
cout<<"请选择你需要的进制:2,8,16,32(输入0时退出):"; //选择进制数
cin>>sel;
switch(sel)
{
case 2 : trans(n,2);
break;
case 8 : trans(n,8);
break;
case 16 : trans(n,16);
break;
case 32 : trans(n,32);
break;
case 0 : break;
default : cout<<"进制输入错误!"<<endl;
}
}while(sel!=0);
}
void trans(int n,int base) //定义实现转换的函数
{
int num[20],i=0,j,m=n;
do
{
i++;
num[i]=m%base;
m=m/base;
}
while(m!=0);
cout<<n<<"转换成"<<base<<"进制的结果为:";
for(j=i;j>=1;j--)
if(num[j]<=9)
cout<<num[j];
else
cout<<num[j]-9+'a';
cout<<endl;
}
----------------解决方案--------------------------------------------------------
想通了````
我们无符号的整数最大也就65535换成最小的2进制也就是16个1,也就是位数最多的一种转换,
那么我就设拥有16个单元的数组,那么其他的转换就不超越这个界了,
懂了``
谢谢版主,谢谢hxpjohn
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<malloc.h>
#define ElemType int
#define MAXNUM 50
typedef struct
{ElemType stack[MAXNUM];
int top;
}Qstack;
void InitStack(Qstack *p)
{if(!p) printf("Wrong!");
p->top=-1;}
void Push(Qstack *p,int s)
{if(p->top<(MAXNUM-1))
{p->top++;
p->stack[p->top]=s;}
else
printf("OverFlow!");
}
void Pop(Qstack *p)
{int i;
ElemType s;
if(p->top!=0)
{for(i=p->top;i>=0;i--)
{s=p->stack[i];
if(s>=10)
{s+='a'-10;
printf("%c",s);}
else
printf("%d",s);
}
printf("\n");}
}
void main()
{ElemType m;
int n,yu;
Qstack *q;
q=(Qstack *)malloc(sizeof(Qstack));
printf("请输入要进行进制转换的十进制数:\n");
scanf("%d",&m);
printf("\n 1---二进制数 \n");
printf("\n 2---八进制数 \n");
printf("\n 3---十六进制数 \n");
printf("请选择要转换成的进制形式(1,2,3):\n");
scanf("%d",&n);
InitStack(q);
printf("\n");
switch(n)
{case 1:if(m<2)
printf("%d\n",m);
else
do
{yu=m%2;
Push(q,yu);
m=m/2;}while(m!=0);
Pop(q);break;
case 2:if(m<8)
printf("%d\n",m);
else
do
{yu=m%8;
Push(q,yu);
m=m/8;}while(m!=0);
Pop(q); break;
case 3:if(m<16)
{if(m>=10)
{m+='a'-10;
printf("%c\n",m);}
else
printf("%d\n",m);}
else
do
{yu=m%16;
Push(q,yu);
m=m/16;}while(m!=0);
Pop(q);break;
}
}
这个是用C来写的,上面那个是用C++的知识来写的.
----------------解决方案--------------------------------------------------------
谢谢```看看先``
----------------解决方案--------------------------------------------------------