| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14453 人关注过本帖
标题:任意进制数和十进制数间转换
只看楼主 加入收藏
shaosuqiang
Rank: 2
等 级:论坛游民
帖 子:17
专家分:12
注 册:2013-5-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
任意进制数和十进制数间转换
#include<stdio.h>
main()
{
    int i=0,base,n,j,num[20];
 
    printf("输入一个十进制的数:");
    scanf("%d",&n);
    printf("输入要转换的进制:");
    scanf("%d",&base);
     do
    {
        i++;
        num[i]=n%base;
        n=n/base;
    }while(n!=0);
    printf("%d",num[0]);
    printf("转换的结果:");
    for(j=i;j>=1;j--); //反向输出
    printf("%d\n",num[j]);
    printf("\n");
}

得出的是一个垃圾值,希望各位能帮忙解答下。
搜索更多相关主题的帖子: 十进制 
2013-06-04 16:41
RobinWang
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:69
专家分:121
注 册:2013-5-31
收藏
得分:0 
#include <iostream>
 using namespace std;
 void change(int num, int base, stack<char>& result)
 {
 while(num != 0)
 {
 if (num % base < 10)
 {
 result.push(num % base + '0');
 }
 else
 {
 result.push(num % base - 10 + 'A');
 }
 num /= base;
 }
 }
 int main()
 {
 int num, base;
 cout<<"please input 十进制数:"<<endl;
 cout<<"please input N进制数:"<<endl;
 cout<<"结果为:"<<endl;
 cin >> num >> base;
 stack<char> result;
 change(num, base, result);
 while(!result.empty())
 {
 cout << result.top();
 result.pop();
 }
 cout << endl;
 return 0;
 }

将压抑的青春能量转化为改造中国的动力!
2013-06-04 18:16
RobinWang
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:69
专家分:121
注 册:2013-5-31
收藏
得分:0 
此题必须用栈,利用其先进后出的特点即可实现数制的转换
若输入还有浮点型,则还需加入队列。

将压抑的青春能量转化为改造中国的动力!
2013-06-04 18:19
shaosuqiang
Rank: 2
等 级:论坛游民
帖 子:17
专家分:12
注 册:2013-5-5
收藏
得分:0 
回复 3楼 RobinWang
我用数组,然后反向输出不可以么??
帮我看看我的程序,有什么问题,谢了
2013-06-04 21:45
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:10 
#include<stdio.h>
 main()
 {
     int i=1,base,n,j,num[20];

     printf("输入一个十进制的数:");
     scanf("%d",&n);
     num[0]=n;

     printf("输入要转换的进制:");
     scanf("%d",&base);

      do
     {
         num[i++]=n%base;
         n/=base;
     }while(n!=0);

     printf("%d",num[0]);
     printf("转换的结果:");
     for(j=i-1;j>=1;j--)//反向输出
        printf("%d",num[j]);
     printf("\n");
 }



你贴出来的程序,,for语句后面有分号,,,很不应该的一个错误。。。。
另外,输出的时候,排版不是很好,不该换行。。。。

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-06-05 00:35
编程20123165
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2013-5-18
收藏
得分:5 
#include<stdio.h>
void main()
{ int m,n,sum=0,i=0,j,a[100],k;
 scanf("%d %d",&n,&m);
 while(n!=0)
 { a[i]=n%10;
   i++;
   n=n/10;
 
 }
 for(k=0;k<i;k++)
    { for(j=1;j<=k;j++)
         a[k]=a[k]*m;
     sum=sum+a[k];
 }

printf("%d\n",sum);
}
2013-06-06 10:47
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:5 
程序代码:
//      作者QQ:1711285081
//最新修改时间:2013.6.6   12:10
//        版本:v0.3(第18次修改)
//      编译器:VS2012 x64(cl jinzhi.c)  GCC 4.7.2 x86(gcc jinzhi.c -o jinzhi)
//    运行环境:windows server 2012   intel x86_64
//  试运行输出:
//             lwb603569640@windows_server_2012 /g/projects
//             $ jinzhi
//                原数据进制:2
//                输入2进制数:10101010101010
//                需转换的进制:10

//                将2进制数10101010101010
//                转换为10进制数:10922

//                继续(Y/N)?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE  100
#define SIZE_INCREMENT  5
typedef struct //栈结构 
{
    int *base; //栈底 
    int *top; //栈顶 
    int stacksize; //栈大小 
}SqStack,*SQSTACK;
int StackInit(SQSTACK s) //初始化栈 
{
    s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
    if(!(s->base))
        exit(0);
    s->top=s->base;
    s->stacksize=STACK_INIT_SIZE;
    return 1;
}
int PUSH(SQSTACK s,int e) //入栈 
{
    if(s->base+s->stacksize==s->top)
    {
        s->base=(int *)realloc(s->base,(SIZE_INCREMENT+s->stacksize)*sizeof(int));
        s->top=s->base+s->stacksize;
        s->stacksize+=SIZE_INCREMENT;
    }
    *(s->top)=e;
     s->top+=1;
     return 1;
}
int POP(SQSTACK s,int *p) //出栈 
{
    if(s->base==s->top) //空栈 
        return 0;
     *p=*(s->top-1);
     s->top--;
     return 1;
}
int StackLength(SQSTACK s) //栈的长度(元素数量) 
{
    return (s->top-s->base);
}
int StackFree(SQSTACK s) //释放栈 
{
    free(s->base);
    s->top=s->base=NULL;
    return 1;
}
char *DecToOther(unsigned long num,int sys) //10进制转换为其他进制,返回一个字符串 
{//num需转换的数据,sys为需转换的进制 
    SqStack s;
    int rem,i,length,num1,inc=1;
    char *out,*p; //控制输出字符串 
    if(!StackInit(&s)) //初始化栈失败 
        exit(0);//退出
    do{
        if(num<sys) //被除数小于进制 
        {
            rem=num;
            PUSH(&s,rem); //进接将被除数入栈 
            break;//退出循环 
        }
        else
        {
            rem=num % sys; //除进制数取余数 
            PUSH(&s,rem); //将余数入栈 
            num=(num-rem)/sys; //
        }
    }while(num); //dividend不为0
    if(sys==16) //16进制有两个字符的前缀 
        inc++;
    length=StackLength(&s); //获取栈的长度(需输出元素的个数) 
    if(!(out=(char *)malloc(sizeof(char)*(length+inc))))//若分配内存失败
    {
        printf("内存分配失败!\n");
        exit(0);
    } 
    p=out; //指针p指向分配内存首地址 
    *p++='0';//添加前缀    
    if(sys==16) //16进制的前缀 
        *p++='x';
    for(i=1;i<=length;i++)
    {
        POP(&s,&num1); //从栈中弹出一个数 
        if(num1<10) //若小于10
            *p++=num1+'0'; //保存数字的ASCII字符 
        else //大于10,输出A~F 
            *p++=num1+'A'-10;//输出A~F之间的字母 
    }
    StackFree(&s); //释放栈所占用空间 
    *p='\0';
    return (out);//返回字符串 
}
int OtherToDec(int sys,char *in_str) //其他进制转换为10进制(输入数)
{ //sys进制,arrat_char需处理的字符串 
    int i,j,length,start=0;
    unsigned long sum=0,pow;
    int *in_bit;
       
    length=strlen(in_str); //字符串的长度 
    if(!(in_bit=(int *)malloc(sizeof(int)*length)))
    {
        printf("内存分配失败!\n");
        exit(0); 
    }
    if(in_str[0]=='-') //为负数,跳过符号 
        start++;
    j=0;
    for(i=length-1;i>=start;i--)
    {
        if(in_str[i]>='0' && in_str[i]<='9') //为数字0~9 
            in_bit[j]=in_str[i]-'0'; //将字符转换为整数 
        else if(in_str[i]>='A' && in_str[i]<='F') //大写字母 A~F
            in_bit[j]=in_str[i]-'A'+10;
        else if(in_str[i]>='a' && in_str[i]<='f') //小写字母 a~f
            in_bit[j]=in_str[i]-'a'+10;
        else
            exit(0);
        j++;
    }
    length-=start; 
    for(i=0;i<length;i++)
    {
        if(in_bit[i]>=sys) //若某个数超过了进制 
        {
            printf("输入的数据不符合%d进制数据的规则!",sys); //显示错误 
            exit(0);
        }
        for(j=1,pow=1;j<=i;j++)
            pow*=sys;
        sum+=in_bit[i]*pow;
    }
    return sum;
}

int main()
{
    int old,new1;
    char select='N',*other,str[80]; //符号
    unsigned long num10; //保存10进制数 
    char array[32];
    do{
        printf("\n原数据进制:");
        scanf("%d",&old);
        printf("输入%d进制数:",old);
        scanf("%s",str); //保存字符串 
        num10=OtherToDec(old,str); //将其他进制转换为10进制 
        printf("需转换的进制:");
        scanf("%d",&new1);
        if(10==new1) //若是转换为10进制 
        {
            printf("\n将%d进制数%s\n转换为10进制数:%d\n",old,str,num10); 
        }
        else
        {
            other=DecToOther(num10,new1);
            printf("将%d进制数%s\n转换为%d进制数:%s\n",old,str,new1,other);
        }
        printf("\n继续(Y/N)?");
        select=getch();
    }while(select=='y' || select =='Y');
    getch();
    return 0;
}

自由、民主、宪政!
2013-06-06 12:12
快速回复:任意进制数和十进制数间转换
数据加载中...
 
   



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

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