新写的进制转换,求大神帮看看

ilovezbw 2013-10-14 08:56:28
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
long power(int m,long x);
long otherToTen(int m,long i);
long tenToOther(int m,long i);
void check(int m);
int main()
{
int m1=0,m2=0;
long i=0,j=0,k=0;
cout << "请输入原进制:" << endl;
cin >> m1;
check(m1);
cout << "请输入原数值:" << endl;
cin >> i;
j=otherToTen(m1,i); //j为原进制转成的10进制数
cout << "请输入转换目标进制:" << endl;
cin >> m2;
check(m2);
k=tenToOther(m2,j); //k为最终数值
cout << "转换后的数值为:" << k << endl;
getchar();
return 0;
}

void check(int m)
{
if ( m <= 0 )
{
cout << "请输入正整数进制!\n";
getchar();
exit(0);
}
}

long power(int m,long x)
{
long answer=1;
if ( m == 0)
{
answer = 1;
}
if ( m == 1)
{
answer = x;
}
if ( m > 1)
{
for (int i=1;i<=m;i++)
{
answer=answer * x;
}
return answer;
}
}

long tenToOther(int m,long i)
{
int w,n=0;
long answer=0;
for (w=1;power(w-1,m)<i;w++)
{
n++; //求位数
}
short* num;
num=new short(n);
for (w=1;w<=n;w++)
{
num[w-1]=i / power(n-w,m); //由最高位向后,依次求各位上的值
i= i % power(n-w,m);
answer += (num[w-1] * power(n-1,10));
}
delete num;
return answer;
}

long otherToTen(int m,long i)
{
int w,n=0;
long answer=0;
for (w=1;power(w-1,10)<i;w++)
{
n++;
}
short* num;
num=new short(n);
for (w=1;w<=n;w++)
{
num[w-1]=i / power(n-w,10);
i=i % power(n,10);
answer += (num[w-1] * power(n-1,m));
}
delete num;
return answer;
}
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-10-15
  • 打赏
  • 举报
回复
你的代码里,没有位的概念,不知如何,表示为N进制。
lm_whales 2013-10-15
  • 打赏
  • 举报
回复
你没搞懂,2进制,10进制,16进制,N进制的概念吧! N进制数 ,每一位,需要 N 个数字表示。 2进制 ,有 2进制表示,和字符表示两种。 10进制有两种BCD码和字符表示3种。 C,C++没有BCD表示的方法。只有字符表示的十进制。 其中字符表示最常用。 字符表示存储为字符串,以便输出。 2进制表示: 就是数,在计算机的内部表示。 字符表示: 就是每一个位的每一个数字,用字符表示出来 ,2进制 ‘0’和 ‘1’ N进制 10,和10一下 数字是 0 ~ N-1 用0~9 用对应的字符‘0’~‘9’表示 16进制用‘0’~‘9’,'A'~'F' 表示 这种表示,可以推广到36进制。 再大,比如37,38 进制,就难以分辨了(不是字母,数字了,没有了顺序的概念)。 通常,字符表示,存为字符串,而不是字符数组。 编程语言的整数,是二进制表示的。 显示出来的字符,和源代码本身的整型常量,以字符表示的10进制,16进制的居多。 C的源代码里,用字符,表示每一位数字的,无前缀的是10进制,有 0x,0X 前缀的是16进制表示。 0做前缀的,是8进制。是一种字符表示。 C字符串 \xnnn 16进制 \0nn 是8进制 编译后的程序中 这些数据会转换为2进制表示。 10 转为N进制 先把10进制字符串,转换成2进制整数,再把整数转换为N进制字符串。 或者,直接把10进制字符串,转换为N进制字符串。 才算完成进制转换。
ilovezbw 2013-10-14
  • 打赏
  • 举报
回复
能编译通过,程序输完头两个数就出错,求大神给看!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧