注册 登录
编程论坛 C++教室

进制转换,有点细节问题

science 发布于 2006-12-31 16:01, 706 次点击
这是十进制转化为其他进制的程序,自己编写的,还不是很成熟。
#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]
有好的方法吗?
7 回复
#2
冰泉2006-12-31 16:43
使用栈!
#3
science2006-12-31 16:50
能给个使用栈的的这个题的程序吗,我还没看栈操作呢

#4
science2006-12-31 16:52
看来有必要提前系统学习一下数据结构

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


#5
zwfc2006-12-31 17:00

这个应该是用到动态数组分配的,我觉得还是有点困难的,因为你要事先知道 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--;
}

#6
wangxiang2006-12-31 17:04
我也写了个,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编辑过]

#7
wangxiang2006-12-31 17:18

加了十六进制中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编辑过]

#8
wangxiang2006-12-31 17:30

还是5楼的好

1