| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 700 人关注过本帖
标题:进制转换,有点细节问题
只看楼主 加入收藏
science
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-11-22
收藏
 问题点数:0 回复次数:7 
进制转换,有点细节问题
这是十进制转化为其他进制的程序,自己编写的,还不是很成熟。
#include<iostream.h>
#define N 2 //定义何种进制
main()
{ int a[20],b[20],k,i,j;
cin>>k;
for(i=0;i<=19;i++) //将十进制通过除法求得余数保留在数组中
{a[i]=k%N;
k=k/N;
}
i=19;
for(j=0;j<=19;j++)//调换顺序
{b[j]=a[i];
i--;
}
for(j=0;j<=19;j++)//输出
cout<<b[j];
cout<<endl;
return 0;
}


有个问题,我最初定义数组是a[20],但实际上,
比如我输入十进制100,输出如下:
100
00000000000001100100
Press any key to continue
这也是个正确答案,但这样非常费用空间。我是只想输出1100100。
我的问题是,如何确定准确的数组空间大小,而不是盲目的定义a[20],b[20]
有好的方法吗?
搜索更多相关主题的帖子: 进制 细节 
2006-12-31 16:01
冰泉
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-12-19
收藏
得分:0 
使用栈!

2006-12-31 16:43
science
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-11-22
收藏
得分:0 
能给个使用栈的的这个题的程序吗,我还没看栈操作呢


2006-12-31 16:50
science
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-11-22
收藏
得分:0 
看来有必要提前系统学习一下数据结构

[此贴子已经被作者于2006-12-31 16:53:02编辑过]



2006-12-31 16:52
zwfc
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2005-10-17
收藏
得分:0 

这个应该是用到动态数组分配的,我觉得还是有点困难的,因为你要事先知道 int a[]的大小。
而a[]的大小是通过,int count=0; while(k){ k=k/N;i++;} count来确定的。
我觉得可以用字符串来做,程序可改为:
#include<iostream>
#include<string>
using namespace std;
#define N 2 //定义何种进制
int main()
{ int k;
cin>>k;
int count=0;
string str="";
char c;
int m;
while(k){
m=k%N;
if (m>9)c=char(m+55);//m>=10,将其转化为A,B,...
else
c=char(m+48);
str += c;
k/=N;
count++;
}

for (int i=count-1;i>=0;i--)
cout<<str[i];
return 0;
}
还有楼主, 我觉得这段代码是多余的,可以直接倒着输出结果。
for(j=0;j<=19;j++)//调换顺序
{b[j]=a[i];
i--;
}


2006-12-31 17:00
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
我也写了个,n代表要转换的进制数,bit表示要转换后所需要的位数
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int num,
bit = 0;
int n;
cin>>num>>n;
int t = 1;
while(num > t)
{
t *= n;
bit++;
}
bit--;
t = (int)pow(n,bit);
while(num >= n)
{
int j = num/t;
cout<<j;
num = num%t;
t /= 2;
bit--;
}
cout<<num;
for(; bit > 0;--bit)
{
cout<<0;
}
cout<<endl;
return 0;
}

[此贴子已经被作者于2006-12-31 17:21:08编辑过]


2006-12-31 17:04
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

加了十六进制中A,B,C,D,E,F的情况
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int num,
bit = 0;
int n;
cin>>num>>n;
int t = 1;
while(num > t)
{
t *= n;
bit++;
}
bit--;
t = (int)pow(n,bit);
while(num >= n)
{
int j = num/t;
if(j>9)
cout<<(char)(j+55);
else
cout<<j;
num = num%t;
t /= 2;
bit--;
}
if(num >9)
cout<<(char)(num+55);
else
cout<<num;
for(; bit > 0;--bit)
{
cout<<0;
}
cout<<endl;
return 0;
}

[此贴子已经被作者于2006-12-31 17:23:27编辑过]


2006-12-31 17:18
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

还是5楼的好


2006-12-31 17:30
快速回复:进制转换,有点细节问题
数据加载中...
 
   



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

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