16进制数4321转10进制:
原来方法 =4*16^3+3*16^2+2*16^1+1*16^0
    =4*16^3+3*16^2+2*16^1+1
    =16*(4*16^2+3*16^1+2)+1
    =16*(16*(4*16^1+3)+2)+1
    =16*(16*(16*(4+0)+3)+2)+1

#include <stdio.h>
#include <math.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进制数*/
long source_to_decimala(char temp[], int source); /*返回由原数转换成的10进制数*/
int decimal_to_object(char temp[], long decimal_num, int object); /*返回转换成目标数制后字符数组的长度*/
void output(char temp[], int length); /*将字符数组逆序打印*/
int main()
{
int source; /*存储原数制*/
int object; /*存储目标数制*/
int length; /*存储转换成目标数制后字符数组的长度*/
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_decimala(temp, source);
length = decimal_to_object(temp, decimal_num, object);
output(temp, length);
printf("继续请输入1,否则输入0:\n");
scanf("%d", &flag);
}
return 0;
}
/*将字符转换成数字*/
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]!='\0'; i++ );
length=i;
for( i=0; i<=length-1; i++ ) /*累加*/
decimal_num = (decimal_num*source) + char_to_num(temp[i]);
return decimal_num;
}
long source_to_decimala(char temp[], int source)
{
long decimal_num = 0; /*存储展开之后的和*/
int length;
int i;
for( i=0; temp[i]!='\0'; i++ );
length=i;
for( i=0; i<=length-1; i++ ) /*累加*/
{
decimal_num = decimal_num + char_to_num(temp[i])*pow(source,length-1-i);
printf("%d ",temp[i]);
}
printf("\n%d\n",decimal_num);
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]='\0';
return i;
}
void output(char temp[], int length)
{
int i;
for( i=length-1; i>=0; i--) /*输出temp数组中的值*/
printf("%c", temp[i]);
printf("\n");
}

最新文章

  1. 用border-image实现波浪边框
  2. 前端弹出层框架layer
  3. [Head First设计模式]一个人的平安夜——单例模式
  4. net core 控制台中文乱码的解决方案
  5. 在WCF数据访问中使用缓存提高Winform字段中文显示速度
  6. Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法
  7. Jena Fuseki 101
  8. objective-c 创建工程/编译/运行程序
  9. 第三方登录过程—OAuth2.0协议
  10. noip 2014 子矩阵
  11. log4j.properties文件配置--官方文档
  12. 利用TraceSource写日志
  13. 你所不了解的css选择器补充
  14. easyui出口excel无法下载框弹出的办法来解决
  15. SQL语句方法语法总结(一)
  16. Scrapy爬虫学习笔记 - 爬虫基础知识
  17. 安卓Android Support Design Library——Snackbar
  18. 解决k8s出现pod服务一直处于ContainerCreating状态的问题的过程
  19. HDU 2083(排序+绝对值+中间值求和)
  20. 一个故事讲清NIO

热门文章

  1. MongoDB学习笔记:快速入门
  2. 【NX二次开发】Block UI 图层
  3. 【NX二次开发】Block UI 整数表
  4. TensorFlow入门实操课程第一章教程笔记
  5. linux下的对拍程序
  6. conn / as sysdba连接不上
  7. WPF中选择文件和选择文件夹的方法
  8. 给STM32MP157C-DK2烧录固件
  9. web自动化之windows页面切换
  10. python之字典(dict)基础篇