标题:[求助]进制转换的编程题
只看楼主
frog555
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2006-11-9
 问题点数:0 回复次数:15 
[求助]进制转换的编程题

/* 函数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?


搜索更多相关主题的帖子: 进制 unsigned void fun 
2007-01-12 18:01
myisgood
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2006-12-25
得分: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");
}
通过 ~~
楼主可以结贴了

2007-01-12 18:21
hxpjohn
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-1-5
得分:0 
循环条件有问题吧,应该是等于0的啊,不然你的循环就只能做一次啊,还有就是把M,K做为参数,像写的那样传递好象不太合法哦
2007-01-12 18:48
frog555
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2006-11-9
得分:0 

不对``你这样只能做结果只有四个的数``一旦超过会出错的````

2007-01-12 18:51
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
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;
}

倚天照海花无数,流水高山心自知。
2007-01-12 18:53
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
以下是引用myisgood在2007-1-12 18:21:49的发言:

#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");
}
通过 ~~
楼主可以结贴了


倚天照海花无数,流水高山心自知。
2007-01-12 18:55
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
得分:0 

一个十进制转化其他进制(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;
}


千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-01-12 18:56
frog555
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2006-11-9
得分:0 
想通了````
我们无符号的整数最大也就65535换成最小的2进制也就是16个1,也就是位数最多的一种转换,
那么我就设拥有16个单元的数组,那么其他的转换就不超越这个界了,
懂了``
谢谢版主,谢谢hxpjohn
2007-01-12 18:58
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
得分:0 
#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++的知识来写的.

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-01-12 19:00
frog555
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2006-11-9
得分:0 
谢谢```看看先``
2007-01-12 19:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-115651-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.086509 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved