⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 整数在2到16进制之间任意转换的程序.txt

📁 爱因斯坦的思考题 二叉树算法集 分解质因数新解 石子归并问题等有趣的C程序
💻 TXT
字号:
程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char digit[16]={"0123456789abcdef"};
int readJZS(int org_goal);
int read_org_data(char *data, int org);
void shift_all(char *org_data, int org, char *goal_data, int goal);
long other_to_ten(char *org_data, int org);
void ten_to_other(long ten, char *goal_data, int goal);

int main(int argc, char *argv[])
{
    int org;                                
    int goal;                               
    char org_data[20]={'\0'};
    char goal_data[20]={'\0'};
    int tmp;
    char c;
    
    while (1)
    {
        org=readJZS(0);
        if  (org==0)
            return 0;
        tmp=read_org_data(org_data, org);
        if  (tmp==0)
            return 0;
        goal=readJZS(1);
        if  (goal==0)
            return 0;
        shift_all(org_data, org, goal_data, goal);
        printf("Result:%s",goal_data);
        printf("Press Q to quit!\n");
        c=getchar();
        if  (toupper(c)=='Q')
            break;        
    }
    system("PAUSE"); 
    return 0;
}

int readJZS(int org_goal)
{
    int ret=0;
     
     while (1)
     {
           if  (org_goal==0)
               printf("Please input origion jin zhi shu(0: complete):");
           else
               printf("Please input goal jin zhi shu(0: complete):");
           scanf("%d",&ret);
           getchar();
           if  (ret>=2 && ret<=16)
               return ret;
           else if(ret!=0)
           {
                printf("Please input integer between 0 and 16.\n");
                continue;
           }
           else
               return 0;
     }
}

int  read_org_data(char *data, int org)
{
     int i;
     char *p;
     int f=0;
     int h=1;
     while (1)
     {
           printf("Please input origion data (integer):");
           /*gets(data);*/
           scanf("%s",data);
           getchar();
           p=data;
           if  (strlen(data)==0)
               return 0;
           while (*p)
           {
                 f=0;
                 for (i=0;i<org;i++)
                 {
                     if  (*p==digit[i])
                     {
                         f=1;
                         break;
                     }
                 }
                 if  (f==0)
                 {
                     h=0;
                     break;
                 }
                 p++;      
           }
           if  (h==0)
           {
               continue;
           }
           else 
           {
                return 1;                 
           }
     }
}

void shift_all(char *org_data, int org, char *goal_data, int goal)
{
     long ten;
     
     ten=other_to_ten(org_data, org);
     ten_to_other(ten, goal_data, goal);
}

long other_to_ten(char *org_data, int org)
{
     long ret=0;
     char *p=org_data;
     int d;
     
     while (*p)
     {
           if  (*p>=48 && *p<58)
          {
              d=*p-48;
          }
          else if(*p>=65 && *p<70)
          {
               d=*p-55;
          }
          else if(*p>=97 && *p<102)
          {
               d=*p-87;
          }
           ret=ret*org+d;
           p++;
     }
     return ret;
}

void ten_to_other(long ten, char *goal_data, int goal)
{
     int i=0;
     while (ten>0)
     {
           goal_data[i++]=digit[ten%goal];
           ten=ten/goal;
     }
     strrev(goal_data);
}

此程序已通过调试。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -