整数n转换为以b进制的数,itob

写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。

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

void itob(int n, char s[],int b)//整数n转换为以b进制的数
{
	int i = 0;
	int start = 0;
	int end = 0;

	if ((b == 2) || (b == 8))//2进制和8进制
	{
		while (n)
		{
			s[i] = n%b + ‘0‘;
			n = n / b;
			i++;
		}

	}

	else if (b == 16)//16进制
	{
		while (n)
		{
			s[i] = "0123456789abcdef"[n%16];
			char*p="0123456789abcdef";
			s[i]=p[n%16];
			即*(p+(N%16))
		n = n / 16;
		i++;
		}

	}
	end = i - 1;

	while (start < end)
	{
		char tmp = s[start];
		s[start] = s[end];
		s[end] = tmp;
		start++;
		end--;
	}
	s[i] = ‘\0‘;
}

int main()
{
	char arr[32];
	int n = 0;
	int b = 0;

	printf("数字:");
		scanf("%d", &n);
	printf("进制:");
	    scanf("%d", &b);
	itob(n, arr, b);
	printf("\n%s\n",arr);

	system("pause");
	return 0;
}
时间: 2024-10-08 20:04:16

整数n转换为以b进制的数,itob的相关文章

将整数n转换为以b进制的数

题目: 编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数,保存到s中. 题目分析: 对于这个问题,根据进制之间的转换特点,将十进制的整数n转换为其他进制,可以利用模除的方式将其转换,但是其中有一个问题:16进制数中表示0123456789abcdef,所以可以将16进制的转换另外解决.解决方式通过建立一个指针变量,通过指针进行解引用,同时建立一个数组用来存放转换后的数,然后进行数组元素的逆置. #define _CRT_SECURE_NO_WARNI

【详解】C语言:编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。

#include<stdio.h> void itob(int n,char s[], int b) {  int i=1;  for(;i<=32;i++)    //共循环了32次,保证得到32位的二进制数  {   s[i-1]= n % b;   //数组是从编号0开始的,一直到编号31结束   n = n/b ; //用模除的方法依次得到每位进制数  }  for(i=32;i>0;i--)  {   printf("%d",s[i-1]);   }

编写一个函数itob(int num,char s[], int n),将整数num转换为以n进制的数。保存到s中。

在本题中,二进制.八进制及十进制算法思路一样,采取模除的方式,输出各个位置的数,接着采用逆序输出.在十六进制中"0123456789abcdef"[num%16],求出各位的数字. #include<stdio.h> void reverse(int len,char arr[]) //逆置 {  int left =0;  int right =len -1;  while(left < right)  {   char temp = arr[left];     

【C语言】【笔试题】编写一个函数itob(int n,char s[], int b),将整数n转换为以b进制的数。保存到s中。

#include <stdio.h> static int i=0; int itob(int n,char s[],int b) { if(n<2) { s[i]=n+'0'; } else { itob(n/2,s,b); //递归 i++; n=n%2; s[i]=n+'0'; } s[i+1]='\0';//结束标志 return 0; } int main () { char s[20]; int num=0; scanf("%d",&num); i

编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示

编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示. 要求: 1) 采用顺序栈实现算法: 2)从键盘输入一个十进制的数,输出相应的八进制数和十六进制数. #include "stdio.h" #define StackSize 100 typedef char ElemType; typedef struct { ElemType data[StackSize]; int top; }SqStack; int trans(int d, in

C语言将16进制的数转换为字符串的方法(改进)

昨天写了一个方法,可以将嵌入式C常用的uint8_t数据转为一个字符,但是程序有警告,尴尬症发作甚是不爽,于是在今天解决了这个问题.昨天的博文 C语言中的char是一字节,也就是8个二进制位,正好可以表示成2个16进制的数.但是第一位是符号位,而单片机用的C语言中常常不牵扯负数,所以更常见的就是使用无符号的char(unsigned char),再定义为uint8_t(typedef unsigned char uint8_t;),这样子就可以用8个二进制位表示成2个16进制的数,如1111 1

c++10进制转换为任意2-16进制数字

#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; int main() { //十进制转换为若干进制>2,<16 = int num; int n;//2-16之间 int a; int i=0; cin>>num>>n; int s[100]; if(n>=2&&n<<16) { while(nu

C语言将16进制的数转换为字符串的方法

今天在写代码的时候遇到一个需求:为了与同一产品中的其它设备统一,上位机要求处理字符串,而不是数组.我们都知道在处理数据的时候数组方便,不过考虑到兼顾别的设备(没错我说的就是TI430做的RFID读卡设备,跟上位机之间的协议传递的是字符串/大笑),就尝试了将16进制的数据改为字符串,也就是0xAB,改成"AB"...虽然看上去没什么用. 原先的数据类型是uint8_t,熟悉单片机的都知道这个的含义,其实也就是unsigned char ,说到底还是个char,但偏偏要求表示成'A&quo

高精度计算(四):大整数乘法(采用“万进制”)

[例1]大整数乘法. 编写一个程序,求两个不超过200 位的非负整数的积. (1)编程思路. 大整数乘大整数,实质就是在小学竖式乘法的基础上枚举各个乘数位与被乘数相乘,累加到结果当中.其中乘数中的第j位与被乘数中的第i位相乘时,结果应该保存到结果的第i+j-1位中. (2)源程序. #include <iostream>using namespace std;const int base=10000;const int maxlen=50+2;void charTobignum(char *c