程序设计实践--2

发布于:2024-06-12 ⋅ 阅读:(167) ⋅ 点赞:(0)

复杂数据处理

进制转换

输入一个十进制数N,将它转换成R进制数输出。

输入描述

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16,
R!=10)。

输出描述

为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考
16进制(比如,10用A表示,等等)。

用例输入 1 

7 2
23 12
-4 3

用例输出 1 

111
1B
-11

进制转换的函数,整数部分需要倒叙输出,若为负数,可以先输出一个负号,然后变为整数,再进行后续操作

注意,数组作为函数参数传递的书写


#include<stdio.h>
int zhuan(int a[],int n,int r);

int main()
{
	int a[10000];
	int n,r,j,k;
	char ch;
	while(scanf("%d %d",&n,&r)!=EOF)
	{
		
	if(n<0)	
	{
		n=-n;
		printf("-");
	}
	k=zhuan(a,n,r);
	for(;k>=0;k--)
	{
		if(a[k]<10&&a[k]>=0)
		{
			printf("%d",a[k]);
		}
		else 
		{
			ch=a[k]-10+'A';
			printf("%c",ch);
		}
	}
	printf("\n");
	}
	return 0;
}
int zhuan(int a[],int n,int r)
{
	int i=0;
	while(n>0)
	{
		a[i]=n%r;
		i++;
		n=n/r;
		//参考二进制除法,十进制数字除2取余
		//从下向上读取 
	}
	return i-1;//方便倒叙输出; 
}

数组的知识

学习学习:http://t.csdnimg.cn/OYvS4

数组名通常表示的都是数组首元素的地址
但是有2个例外:
   1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小
   2. &数组名,这里的数组名表示的依然是整个数组,所以&数组名取出的是整个数组的地址

进制转换(二)

将十进制的正实数转换成对应的二进制数。

输入描述

输入十进制实数f(0<f<100000000),输入0时结束。

输出描述

输出f对应的二进制数,小数点后保留6位。

用例输入 1 

123.25
123456.789
0

用例输出 1 

1111011.010000
11110001001000000.110010

思路大概整数部分同上,小数部分乘2,然后从左向右读取,即正着读取

有小数,选择double类型,好久没用了,忘记了快。

使用double类型时,用%lf输入,%f输出避免出错。

#include<stdio.h>
int zhuan(int zh[],int n);
void zhuanx(double n);
int main()
{
	int i;
	double n;
	double xs;
	int zh[10000];
	scanf("%lf",&n);
	while(n!=0)
	{
		if(n<0)
		{
			n=-n;
			printf("-");
		}
		i=zhuan(zh,(int)n);
		//input --
		for(;i>=0;i--)
		{
			printf("%d",zh[i]); 
		}
		printf(".");
		xs=n-(int)n;
		zhuanx(xs);
		printf("\n");
		
		scanf("%lf",&n);
	}
	return 0;
}
int zhuan(int a[],int n)
{
	int i=0;
	while(n>0)
	{
		a[i]=n%2;
		i++;
		n=n/2;
	}
	return i-1;
}

void zhuanx(double n)
{
	int i;
	for(i=

网站公告

今日签到

点亮在社区的每一天
去签到