首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我的这个进制转换简单小程序哪里错了~

2012-04-23 
我的这个进制转换简单小程序错哪了~~求助~~//输入一个十进制数转换成2,8,16,32进制数输出#includeiostrea

我的这个进制转换简单小程序错哪了~~求助~~
//输入一个十进制数转换成2,8,16,32进制数输出
#include<iostream>
using namespace std;
int main()
{
int num,n;
  char a[32]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'};
char b[100];
cin>>num>>n;
int i,temp,count;
temp=num;
count=num/n;
for(i=0;i<num/n;i++)
{
b[i]=a[num%n-1];
num=num/n;
}
for(i=count-1;i>=0;i--)
cout<<b[i];
return 0;
}


[解决办法]

C/C++ code
#include<iostream>using namespace std;int main(){    int num,n,i = 0,count = 0;    char a[32]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'};    char b[100];    cin>>num>>n;    do    {        b[i++]=a[num%n];        num=num/n;    }while(num!=0);        count=i;    for(i=count-1;i>=0;i--)        cout<<b[i];    return 0;}
[解决办法]
#include<iostream>
using namespace std;
int main()
{
int num,n;
char a[32]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'};
char b[100];
cin>>num>>n;
int i,temp,count;
temp=num;
count=num/n;
for(i=0;i<count;i++)
{
b[i]=a[num%n];
num=num/n;
}
for(i=count-1;i>=0;i--)
cout<<b[i];
return 0;

}
你的循环弄错了~~

for(i=0;i<count;i++)
{
b[i]=a[num%n];
num=num/n;
}
这样既可~
[解决办法]
楼主好巧,我最近无聊,也写了这样一个进制转换。
有点不伦不类,用了C的函数,用了C++的类型。

C/C++ code
#include <stdio.h>typedef unsigned char byte;typedef unsigned int uint;#define SYSTEM_32BIT    32#define MAX_FORMAT        36const char BYTE_INT[MAX_FORMAT] = {    '0','1','2','3','4','5','6','7','8','9',    'A','B','C','D','E','F','G',    'H','I','J','K','L','M','N',    'O','P','Q','R','S','T',    'U','V','W','X','Y','Z'};bool FormatConv(uint nSrc ,byte ucFormat ,char *pcDes){    if ( 2 > ucFormat )    // 0 1进制除外        return false;    if ( 0 == nSrc )        return false;    if (ucFormat > MAX_FORMAT)        return false;    byte ucDes[SYSTEM_32BIT] = {0};    byte ucIndex = 0;    while (true)    {        if ( ucFormat > nSrc )        {            ucDes[ucIndex] = nSrc % ucFormat;            ucIndex++;            break;        }        ucDes[ucIndex] = nSrc % ucFormat;        ucIndex++;        nSrc /= ucFormat;    }    for (int i= ucIndex-1 ;0<=i ;i--)        *(pcDes++) = BYTE_INT[ucDes[i]];    return true;}void TestSample(int num ,byte ucFormat){    uint unSrcConv = num;    char arrDes[SYSTEM_32BIT + 1] = {0};    FormatConv(unSrcConv ,ucFormat,arrDes);    printf("src=%d\t\t,des = %s\n" ,num ,arrDes);}int main(char argc ,char *argv[]){    printf("%s",STR_MAP[1]);    TestSample(7,2);    TestSample(23,12);    TestSample(4,3);    TestSample(-4,3);    return 0;}
[解决办法]
使用未初始化变量是初学者最常见的错误之一。
提醒几句:
1.把变量的声明与定义放在一起;
2.定义后,无论使用与否,给它个合理的初始值。一般都是0或者NULL
3.使用已定义变量时,进行安全检查!比如一些判断语句。这样增强程序的健壮性!

热点排行