复杂数据处理
进制转换
输入一个十进制数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=