59任由制转换

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

int 文本到整数(char * p_输入) {
 int l_几位数 =
strlen(p_输入);
 int l_结果 = 0;
 int i = 0;
 if (p_输入[0] == ‘-‘) {
  i
= 1;
 }

for (; i < l_几位数; i++) {
  int l_倍数
= 1;
  for (size_t ii = i; ii < (l_几位数 - 1); ii++) {
   l_倍数 = l_倍数 *
10;
  }
  l_结果 = l_结果 + (p_输入[i] - 48)*l_倍数;
 }
 if (p_输入[0] == ‘-‘)
{
  return -l_结果;
 }

return l_结果;
}

char  十进制数字转十六进制字符(int l_十进制)
{
 char l_十六进制字符 = 0;
 switch (l_十进制) {
 case 10:
  l_十六进制字符 =
‘A‘;
  break;
 case 11:
  l_十六进制字符 = ‘B‘;
  break;
 case
12:
  l_十六进制字符 = ‘C‘;
  break;
 case 13:
  l_十六进制字符 =
‘D‘;
  break;
 case 14:
  l_十六进制字符 = ‘E‘;
  break;
 case
15:
  l_十六进制字符 = ‘F‘;
  break;
 }
 return l_十六进制字符;
}

int  十六进制字符转十进制数字(char p_十六进制字符) {
 int
l_十进制 = 0;
 switch (p_十六进制字符) {
 case ‘A‘:
  l_十进制 =
10;
  break;
 case ‘B‘:
  l_十进制 = 11;
  break;
 case
‘C‘:
  l_十进制 = 12;
  break;
 case ‘D‘:
  l_十进制 =
13;
  break;
 case ‘E‘:
  l_十进制 = 14;
  break;
 case
‘F‘:
  l_十进制 = 15;
  break;
 }
 return l_十进制;
}

void f_进制转换(int p_原始进制, char *p_原始数据, int
p_目标进制, char *p_目标数据) {
 if ((p_原始进制 >= 2 && p_原始进制 <= 16)
&& (p_目标进制 >= 2 && p_目标进制 <= 16)) {

//不管什么进制,一进入函数,一律转换为十进制.
  int
l_十进制 = 0;
  int l_次方 = 0;
  if (p_原始进制 == 10) {
   l_十进制 =
文本到整数(p_原始数据);
  }
  else {
   l_次方 = strlen(p_原始数据) - 1;
   for
(size_t i = 0; i < strlen(p_原始数据); i++) {
    if (p_原始数据[i] >= 48
&& p_原始数据[i] <= 57) {
     l_十进制 = l_十进制 + (p_原始数据[i] -
48)*pow(p_原始进制, l_次方);
    }
    else {

l_十进制 = l_十进制 +
十六进制字符转十进制数字(p_原始数据[i])*pow(p_原始进制,
l_次方);
    }
    l_次方--;
   }

}

//利用求余法,转换进制,但输出结果都是反的.
  int
l_商, l_余数, l_备份商;
  char l_反转目标进制[33] = { 0 };
  int l_索引 = 0;
  l_备份商
= l_十进制;

do {
   l_商 = l_备份商 /
p_目标进制;
   l_余数 = l_备份商 % p_目标进制;
   l_备份商 = l_商;
   if (l_余数 >= 0
&& l_余数 <= 9) {
    l_反转目标进制[l_索引] = l_余数 + 48;
   }
   else
{
    l_反转目标进制[l_索引] = 十进制数字转十六进制字符(l_余数);
   }

l_索引++;

} while (l_商 != 0);
  l_反转目标进制[l_索引]
= ‘\0‘;

//开始进行反转
  l_索引 = 0;
  for (int i
= strlen(l_反转目标进制) - 1; i >= 0; i--) {
   p_目标数据[l_索引] =
l_反转目标进制[i];
   l_索引++;
  }
  p_目标数据[l_索引] = ‘\0‘;

}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int 转换(char *输入) {
int 几位数 = strlen(输入) - 1;
int 结果;
for (int i = 0; i < 几位数; i++)
{
int 倍数 = 1;
for (int ii = 0; ii < 几位数 - i; ii++)
{
倍数 = 倍数 * 10;
}
结果 = 结果 + (输入[i] - 48) * 倍数;
}
return 结果;
}
int 转十进制字母(char 字母) {
int 十进制 = 0;
switch (字母) {
case ‘A‘:
十进制 = 10;
break;
case ‘B‘:
十进制 = 11;
break;
case ‘C‘:
十进制 = 12;
break;
case ‘D‘:
十进制 = 13;
break;
case ‘E‘:
十进制 = 14;
break;
case ‘F‘:
十进制 = 15;
break;
}
return 字母;
}

void 进制转换(char *原始数据, int 原始进制, int 目标进制, char *输出数据) {
int 输出 = 0;
int 次方 = strlen(原始数据) - 2;
//二进制转换十进制
//10111B = 1x24 + 0x23 + 1 x22 + 1 x21 + 1 x20 = 23
//十六进制转换十进制
//125H = 1×162+2×161+5×160=293D
if (目标进制 == 10) {

输出 = atoi(原始数据);
}
else {

for (int i = 0; i < strlen(原始数据) - 1; i++)
{

if (原始数据[i] >= 48 && 原始数据[i] <= 57)
{

输出 = 输出 + (原始数据[i] - 48)*pow(目标进制, 次方);
}
else {
输出 = 输出 + 转十进制字母(原始数据[i] - 48)*pow(目标进制, 次方);
}
次方--;
}
}
printf("%d\n", 输出);

}
void main() {
char 原始数据[100] = { 0 };
char 原始进制[5] = { 0 };
char 目标进制[5] = { 0 };
char 输出数据[100] = { 0 };
printf("原始数据");
fgets(原始数据, sizeof(原始数据), stdin);
printf("原始进制");
fgets(原始进制, sizeof(原始进制), stdin);
printf("目标进制");
fgets(目标进制, sizeof(目标进制), stdin);
进制转换(原始数据, atoi(原始进制), atoi(目标进制), 输出数据);
system("pause");

}

时间: 2024-11-13 08:56:47

59任由制转换的相关文章

2~62位任意进制转换(c++)

进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最后再将负号补回来,我认为这种做法是不对的. 正确的做法是:考虑好按照16位(short)还是32位(int)抑或64位(long long),先求出二进制补码(这时候就正负数就统一了),将二进制数转换为十进制后在转换为其他进制(如果有小伙伴知道如何直接将二进制转换为任意进制的方法可以留言告诉我,不胜

九度oj 题目1080:进制转换

题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N<=36). 下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出. 输出: 输出X的N进制表示的数. 样例输入: 16 10 F 样例输出: 15 提示: 输入时字母部分为大写,输出时为小写,并且有大数据. 这题初看起来另我头疼,考虑不难但是很麻烦 一开始想的比较绕,准备先把任意进制转换成10进制,再转化成n进制,于是写出了下面的代码 1 #include

lua之m进制转换为n进制-任意进制转换算法

够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 1 --数组倒序排列 2 local function orderByDesc( input ) 3 local output = {} 4 local count = #input 5 while count > 0 do 6 table.insert(output, input[count] ) 7 count = count -1 8 end 9 return output 10 end 11 12 --

常用进制转换

原文:常用进制转换 最近的工作中,需要接触到一些硬件设备,处理这些设备的通讯,因此需要进行一些进制的转换.      其实,二进制.十六进制这些基本的知识,在我们刚学编程的时候,基础课应该已经讲过的了.但是,包括我自己在内,当时也仅仅是知道一般的换算规则,但是具体怎么应用,在c#中又是如何表示,也是近期才有比较深的体会.      具体的知识,各位就自己查看相关的基础知识了,这里我只给出自己在工作中的体会和实际的类库.      首先,先解释下C#的类型.一般,我们常用的有 byte.short

进制转换( C++字符数组 )

注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数值,这将能够完整存储数据,但是也相对于代码较长 进制转换只需要两步: R -> 十  或者  十 -> R  (R表示除十进制的任意进制,10表示十进制) 以下是较为完整的全部代码,若是实现如何转换的,主看: void Ten_Other(char[],int,int,char[],int&

高精度的进制转换

1 #include <stdio.h> 2 #include <string.h> 3 4 char str[1000];//输入字符串 5 int start[1000],ans[1000],res[1000]; //被除数,商,余数 6 //res[]存的是余数,其最后结果的逆序为所求的结果 7 //转换前后的进制 8 const int oldBase = 10; 9 const int newBase = 2; 10 11 void change() 12 { 13 //

codevs 进制转换类型x

进制转换 1.计算机中采用二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供有利途径.节省设备等优点,为了便于描述,又长用八.十六进制作为二进制的缩写,一般技术都采用进位计数,其特点: (1)逢N进一,N是每种进位计数制表示一位数所需要符号数目为基数. 二进制:逢二进一,借一当二 八进制:逢八进一,借一当八 十六进制:........ (2)数制转换 不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的,若转换前两

HDUJ 2031 进制转换

进制转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24096    Accepted Submission(s): 13492 Problem Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<

2014年10月8日——进制转换

一.进制说明 1.十进制     十进制使用十个数字(0.1.2.3.4.5.6.7.8.9)记数,基数为10,逢十进一.     历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算.设计十进制机器比设计二进制机器复杂得多.而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数.设计过程简单,可靠性高.因此,现在改为二进制计算机. 2.二进制 二进制以2为基数,只用0和1两个数字表示数,逢2进一.