标题:做了个任意转进制的程序。。大家评价评价
只看楼主
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
结帖率:25%
 问题点数:0 回复次数:9 
做了个任意转进制的程序。。大家评价评价
#include<stdio.h>
#include<math.h>
main()
{
    int a,b,x,i[50],j,g;
    char y,w;
   
N0:printf("要有几进制转换成几进制?用隔开,如10 2___:");
    scanf("%d\040%d%c",&a,&b,&w);
N1:printf("\n输入需要转换的整数");
   x=0;
   j=1;
   y=0;
    while(1)//输入,并把每位转成10进制
    {
        scanf("%c",&y);
        if(y==10)     
        {
            j--;
            g=j;
            goto N2;
        }
        
        if(y>='0'&&y<='9')
        {
            if(y>=a+'0')
        {
            printf("你选择的是%d进制,输入错误,重新输入",a);
            goto N1;
        }

            else i[j]=y-'0';
            j++;
        }
        if(y>='A'&&y<='Z')
        {            
            if(y>=a+'0'+7)
        {
            printf("你选择的是%d进制,输入错误,重新输入",a);
            goto N1;
        }

            else i[j]=y-'0'-7;
            j++;
        }
    }
//j等于位数
N2:while(j>=1)//将整个数转成10进制
    {
        x=x+i[j]*pow(a,g-j);
        j--;//g++;
    }
    //x为输入的数,j为0
   
    while(x>0)
    {
        i[j]=x%b;
        x=x/b;
        j++;
    }
    j--;
    //转换的数的最高位为j
    printf("转换成%d进制为:",b);
    while(j>=0)
    {
        if(i[j]<10)
        {
            printf("%c",i[j]+'0');
            j--;
        }
        else        
        {
            printf("%c",i[j]+'0'+7);
            j--;
        }

    }
    printf("\n输入新的数按y,重头开始按a,退出按任意键");
    scanf("%c%c",&w,&y);
    if(w=='y')goto N1;
    if(w=='a')goto N0;
}

虽然只能用来转整数。。。
 

搜索更多相关主题的帖子: 进制 评价 
2009-11-04 16:23
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
得分:0 
LZ写的很好 ·赞一个··就是 goto太多···看着有点晕···下面是我写的···没LZ的那么高深···不过比较好懂··
程序代码:
#include<iostream>
using namespace std;
main()
{ 
  void jinzhi(int ,int ); //声明要调用的进制转换的函数
  int n,r;
  while(cin>>n>>r)
  {
      if(n<0)      //如果n是负数,则先输出一个负号并另其等于其相反数
       printf("-"),n=-n;
      jinzhi(n,r);   //调用进制转换函数
      printf("\n");
    }
  return 0;
}
void jinzhi(int n,int r)   //定义一个用来转换十进制为其它进制的函数
{
    if(n)      //用递归实现不断相除、取模、输出
        jinzhi(n/r,r),printf("%c",n%r>9?n%r-10+'A':n%r+'0');
}

2009-11-04 21:19
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
得分:0 
不看就顶

想象力征服世界
2009-11-04 21:56
xiefeng122
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
得分:0 
建议LZ少用goto,2楼很好
2009-11-04 22:16
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
得分:0 
程序代码:
#include <stdio.h>
long a[100], i;
void jzzh (long jz, long num)
{
    long j;
    for (i = 0; ; i ++)
    {   
        j = num % jz;
        if (num)
            a[i] = j;
        else
            break;
        num /= jz;
        }
    }
main ()
{
    long jz, num;
    while (scanf ("%ld-%ld",&jz,&num))
    {    
        jzzh (jz, num);
         while (i >= 0)
        printf ("%ld",a[i--]);
        puts("\n");
    }
    getch ();
    return 0;
    }
我也贴个
最近在看位运算
这个只能转2和8的

想象力征服世界
2009-11-08 18:07
wslhnsng
Rank: 2
等 级:论坛游民
帖 子:48
专家分:37
注 册:2009-2-20
得分:0 
不顶就看
2009-11-08 19:19
hsm8592
Rank: 2
等 级:论坛游民
帖 子:55
专家分:57
注 册:2009-11-6
得分:0 
先顶一个
2009-11-08 19:58
rexzheng
Rank: 2
等 级:论坛游民
帖 子:32
专家分:13
注 册:2009-10-26
得分:0 
2楼用的是C++吧。。。我的的确挺复杂。。。
不过可以用来把任意进制转成任意进制。。。
4楼的说的很对。。要少有goto。。但是goto真的很好用。。哈哈
2009-11-11 17:14
wsckt
Rank: 2
来 自:java风暴
等 级:论坛游民
帖 子:44
专家分:75
注 册:2009-10-20
得分:0 
goto用少点好..

喜欢灰太狼,喜欢它永不言败的精神!
喜欢java,喜欢它不需要理由!
2009-11-11 17:16
fenzhi4297
Rank: 2
等 级:论坛游民
帖 子:34
专家分:13
注 册:2009-8-31
得分:0 

#include <stdio.h>
#include <string.h>
#define MAXSIZE 256
//#define N 78
//#define R 2
typedef int Struct;
typedef struct
{ int elem[MAXSIZE];
   int top;
}SeqStack;
void InintStack_sq(SeqStack *s)
{
  s->top=-1;
   
}
Struct Empty_sq(SeqStack *s)
{  return (s->top==-1);
}
void cobversion(int N,int R)
{ SeqStack *s;
  int x,a;
  s=(SeqStack *)malloc(sizeof(SeqStack));
   InintStack_sq(s);
   while(N)
   { s->top++;
     a=s->elem[s->top]=N%R;
     N=N/R;
     }
     printf("THE\n");
     while(!Empty_sq(s))
     {
       x=s->elem[s->top];
       s->top--;
       printf("%d",x);
     }
   
   }



int main(int argc, char *argv[])
{ int Num,r;
  printf("转换");
  scanf("%d%d",&Num,&r);
  if((Num>=0)&&(0<r))
  {cobversion(Num,r);}
    return 0;
} 我的 专制的
2009-11-11 19:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-291008-1-1.html




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

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