• 十进制与其他进制(2-9进制)的相互转换 (C语言)

    2006年03月16日

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://mathon.blogbus.com/logs/2075836.html

    #include
    #include

    void oth_to_ten(void);/*其他进制转换为十进制*/
    void ten_to_oth(void);/*十进制转换为其他进制*/
    int char_to_num(char ch);/*把输入的字符转换为数字*/
    int squ(int num, int i);/*计算每一位的权值*/

    int main( void )
    {
       int flag;

       do{
          puts("please get a choice:");
          puts("Enter 1 to choose ten_to_oth \nEnter 0 to choose oth_to_ten");
          scanf("%d",&flag);
       }while(flag !=0 && flag !=1);
      
       if(flag == 1) 
           ten_to_oth();   /*十进制转换为其他进制*/
          else
           oth_to_ten();  /*其他进制转换为十进制*/
      
       system("pause");
       return 0;
    }
        
      void ten_to_oth(void)   /*十进制转换为其他进制*/
      {
         int sum, n, j, i=0;
         int arr[80];
        
         printf("输入一个十进制数: ");
         scanf("%d", &sum);
         do{
              printf("\n输入你想要的进制 :  ");
             scanf("%d", &n);
         }while(n<2 || n>10); 
     
        do{
          i++;
          arr
    =sum%n;  /*从下标 1 开始计数*/
          sum=sum/n;
          if(i >= 80)
              exit(1);
       }while(sum != 0);   
      
       printf("你输入了:\t");
       for(j=i; j>0; j--)
           printf("%d",arr[j]);
    }     


    void oth_to_ten(void)   /*其他进制转换为十进制*/
    {
        int n, j, i=0,num;
        long sum=0;
        int arr2[80];
        char ch,arr1[80];
       
        do{
              printf("\n你想把几进制数转换为十进制 :  ");
             scanf("%d", &n);
         }while(n<2 || n>10);
        
        printf("请输入一个 %d 进制数: ",n);
       
        fflush(stdin);
       
        ch=getchar();
        while(ch != '\n')
        {
           while(ch<48 || ch>=n+48)
               ch=getchar();   /*输入非数字或错误数字即无效*/
           i++;
           arr1
    =ch;
           ch=getchar();
        }

        printf("你输入了  : "); 
        for(j=1; j<=i; j++)
            printf("%c",arr1[j]);
           
        printf("\n");    
        for(i=0,j=j-1; j>=1; j--,i++)
         {
             arr2[j]=char_to_num(arr1[j]);  /*把输入的字符转换为数字*/
             sum+=arr2[j]*squ(n,i);   /*把每一位的值求出然后相加*/
         }    
         printf("你输入的数字转化为十进制为 : %ld",sum);
    }
      
     
       int char_to_num(char ch)  /*把输入的字符转换为数字*/
      {
         int num;
         num=(int)ch-48;
         return num;
      } 
     
       int squ(int num, int i)   /*计算每一位的权值*/
       {
          long sum;
          if(i == 0)
              return 1;
          else
              sum=num*squ(num,i-1);
          return sum;   
       }  
     
     我将此程序,其他进制数改为十进制数时进行了优化,把两个函数集中为一个,算法上有所改进。
    /*十进制与其他进制(2-9进制)的相互转换,程序能够自动帮助用户纠正输入错误*/

    #include
    #include

    void oth_to_ten(void);/*其他进制转换为十进制*/
    void ten_to_oth(void);/*十进制转换为其他进制*/
    long char_to_num(char a[], int len, int n);/*把输入的字符转换为数字*/

    int main( void )
    {
       int flag;

       do{
          puts("please get a choice:");
          puts("Enter 1 to choose ten_to_oth \nEnter 0 to choose oth_to_ten");
          scanf("%d",&flag);
       }while(flag !=0 && flag !=1);
      
       if(flag == 1) 
           ten_to_oth();   /*十进制转换为其他进制*/
          else
           oth_to_ten();  /*其他进制转换为十进制*/
      
       system("pause");
       return 0;
    }
        
      void ten_to_oth(void)   /*十进制转换为其他进制*/
      {
         int sum, n, j, i=0;
         int arr[80];
        
         printf("输入一个十进制数: ");
         scanf("%d", &sum);
         do{
              printf("\n输入你想要的进制 :  ");
              scanf("%d", &n);
         }while(n<2 || n>10); 
     
        do{
          i++;
          arr
    =sum%n;  /*从下标 1 开始计数*/
          sum=sum/n;
          if(i >= 80)
              exit(1);
       }while(sum != 0);   
      
       printf("你输入了:\t");
       for(j=i; j>0; j--)
           printf("%d",arr[j]);
    }     


    void oth_to_ten(void)   /*其他进制转换为十进制*/
    {
        int n, j, i, num;
        long sum=0;
        int arr2[80];
        char ch, c, arr1[80], *parr1;
       
        parr1=arr1;
       
        do{
              printf("\n你想把几进制数转换为十进制 :  ");
              scanf("%d", &n);
         }while(n<2 || n>10);
      
           printf("请输入一个 %d 进制数: ",n);
           fflush(stdin);
           ch=getchar();
           i=0;
           while(ch != '\n')
           {
              while(ch<48 || ch>=n+48)
                  ch=getchar();   /*输入非数字或错误数字即无效*/
              i++;
              arr1
    =ch;
              ch=getchar();
           }
      
           printf("你输入了  : "); 
           for(j=1; j<=i; j++)
               printf("%c",arr1[j]);
           printf("\n");  
         
        sum=char_to_num(parr1, i, n);
       
        printf("你输入的数字转化为十进制为 : %ld",sum);
        
    }
      
     
       long char_to_num(char a[], int len, int n)  /*把输入的字符转换为数字*/
      {
         long num=0;
         int k=1;
         for(int i=len; i>=1; i--)
         {
            num += int(a
    -'0')*k;
            k *= n;/*k表示权值*/
         }     
         return num;
      } 


    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我