zoukankan      html  css  js  c++  java
  • 进制转换

    #include <stdio.h>
    #include<string.h>
    #define MAXCHAR 101       	  			/*最大允许字符串长度*/
    int char_to_num(char ch);            			/*返回字符对应的数字*/
    char num_to_char(int num);           			/*返回数字对应的字符*/
    long source_to_decimal(char temp[],int source); 	/*返回由原数转换成的10进制数*/
    int decimal_to_object(char temp[],long decimal_num,int object); /*返回转换成目标数制后字符数组的长度*/
    void output(char temp[]); 				/*将字符数组逆序打印*/
    int main()
    {
    	int source;   							/*存储原数制*/
      	int object;    							/*存储目标数制*/
      	long decimal_num;    					/*存储转换成的10进制数*/
      	char temp[MAXCHAR];  					/*存储待转换的数值和转换后的数值*/
      	int flag=1;    							/*存储是否退出程序的标志*/
    	while(flag)   							/*利用输入的flag值控制循环是否结束*/
    	{
    		printf("转换前的数是:");
    		scanf("%s",temp);
      	    printf("转换前的数制是:");
      	    scanf("%d",&source);
      	    printf("转换后的数制是:");
      	    scanf("%d",&object);
      	    printf("转换后的数是:");
    		decimal_num=source_to_decimal(temp,source);         /*无论是谁,先转化为十进制*/
    		decimal_to_object(temp,decimal_num,object);
    		output(temp);
    		printf("继续请输入1,否则输入0:
    ");
    		scanf("%d",&flag);
    	}
    }
    /*将字符转换成数字*/
    int char_to_num(char ch)
    {
    	if(ch>='0'&&ch<='9')
    		return ch-'0';   						/*将数字字符转换成数字*/
    	else
      	    return ch-'A'+10;   					/*将字母字符转换成数字*/
    }
    char num_to_char(int num)
    {
    	if(num>=0&&num<=9)
    		return (char)('0'+num-0);   			/*将0~9之间的数字转换成字符*/
    	else
      	    return (char)('A'+num-10);   			/*将大于10的数字转换成字符*/
    }
    long source_to_decimal(char temp[],int source)
    {
    	long decimal_num=0;   					/*存储展开之后的和*/
    	int length;
    	int i;
    	for(i=0;temp[i]!='';i++);
    	length=i;
    	/*下面这一个耗时较短,不过不好懂*/
    //  	for(i=0;i<=length-1;i++)   					/*累加*/
    //		decimal_num=(decimal_num*source)+char_to_num(temp[i]);
        /*再下面这一个耗时就较长了,不过易懂,按权相加*/
        for(i = 0; i < length; i++)
        {
            int t = length - i - 1, dec = char_to_num(temp[i]);
            while(t--)
                dec = dec * source;
            decimal_num += dec;
        }
      	return decimal_num;
    }
    int decimal_to_object(char temp[],long decimal_num,int object)
    {
    	int i=0;
      	while(decimal_num)
    	{
    		temp[i]=num_to_char(decimal_num%object);   /*求出余数并转换为字符*/
    		decimal_num=decimal_num/object;   	/*用十进制数除以基数*/
    		i++;
    	}
    	temp[i]='';
    	return i;
    }
    void output(char temp[])
    {
    	int i = strlen(temp) ;
    	while(i--)   					/*输出temp数组中的值*/
    		printf("%c",temp[i]);
    
    	printf("
    ");
    }
    
  • 相关阅读:
    吾爱破解2018-2020优秀文章合集
    分享一个零基础入门学习Python(第2版)带课件及源码
    fiddler抓包工具详细配置方法,多图详细(转)
    浏览器提速,支持95%的国产浏览器(转)
    易语言5.92学习版
    Android Studio 之 ViewModel (转)
    一款易语言软件启动前修改(劫持DLL注入修改)【转】
    某桌球辅助登录算法分析并转本地验证
    软件虚拟机保护分析资料整理
    HttpCanary其他教程
  • 原文地址:https://www.cnblogs.com/KeepZ/p/11143805.html
Copyright © 2011-2022 走看看