问题 A: 十进制整数转二进制
时间限制: 1 Sec  内存限制: 2 MB
提交: 932  解决: 399
[提交][状态][讨论版]
题目描述
给出一个十进制的非负整数x,x<=216,把它转换成二进制数输出。
输入
输入为多行,每行一个整数x,至读入EOF结束。
输出
每行输出x对应的二进制数值。
样例输入
0
1
3
33
65535
样例输出
0
1
11
100001
111111*********1
提示
本题有多种解法:可以用循环迭代对2的除法和取余操作,不过处理的顺序与输出顺序相反,需要利用数组存储;用取对数或从大到小减去2的整数次幂的方法计算与输出顺序是相同的;也可以用printf()把十进制的数值处理成十六进制,然后1位十六进制转4位二进制;也可以用位运算处理。
#include<stdio.h>
int main()
{
long int a[65536],b,c,i,j;
while (scanf("%ld",&b)!=EOF)
{
    if(b==0)
        printf("0\n");
    else
    {
    c=0;
    for(i=b;(i/2!=0)||(i==1);i=i/2)
    {
        a[c]=i%2;
       
        c=c+1;
    }
   
        for(j=c-1;j>0;j--)
            printf("%ld",a[j]);
        printf("%ld\n",a[0]);
    }
}
}
问题 B: 求一元二次方程的根
时间限制: 1 Sec  内存限制: 2 MB
提交: 1050  解决: 106
[提交][状态][讨论版]
题目描述
一元二次方程的标准形式为ax2+bx+c=0(a≠0),其中a、b、c为常数。求解一元二次方程的根x时有三种情况,分别为(记Δ=b2-4ac):
1. Δ>0,有两个不等的实根;
2. Δ=0,有两个相同的实根;
3. Δ<0,有两个共轭的虚根。
输入
输入为多行,每行为一元二次方程的三个常数a,b,c,在double类型范围之内。当输入的a为0时,表示输入结束。
输出
每行输入的样例对应三行输出。
第一行输出为样例的编号。第二行输出为所输入常数a,b,c对应的一元二次方程的标准形式,要求输出满足a>0。第三行输出为所输入方程的根,分为三种情况:1. 若方程满足Δ>0,
即有两不等实根x1、x2,则按大小顺序输出这两个实根。2. 若方程满足Δ=0,即有两相同实根x,则输出一个实根。3. 若方程满足Δ<0,即有两共轭的虚根x1、x2,则输出两个虚根,虚部符号为正的(即u+vi形式)先输出,虚部符号为负的(x-yi形式)后输出。
以上输出均不输出数学上无意义或可省略的的符号,所有数值最多保留6位有效数字。每个样例之后都有一个空行分隔。
样例输入
1 2 1
-1 2 -1
-5 2 -0.2
-3 2 0
3 0 12
数学二进制的算法2 4 4
0
样例输出
Case 1 :
x^2 + 2x + 1 = 0
only one real root : -1
Case 2 :
x^2 - 2x + 1 = 0
only one real root : 1
Case 3 :
5x^2 - 2x + 0.2 = 0
only one real root : 0.2
Case 4 :
3x^2 - 2x = 0
two real roots : 0, 0.666667
Case 5 :
3x^2 + 12 = 0
two imaginary roots : 2i, -2i
Case 6 :
2x^2 + 4x + 4 = 0
two imaginary roots : -1+i, -1-i
提示
输出方程格式的各种情况要想清楚,这一部分测试数据给的很全面。另一个就是浮点数的精度控制,这一部分sample给出了例子。
值得注意的是,linux下gcc编译的浮点数运算结果有-0,这是OJ系统Judge端使用的系统;而windows XP下的minGW编译器和VC6不会产生-0,只会输出0;但windows 7下的minGW编译器是能够产生-0的(确实很诡异)。因此使用windows XP的同学忽略了对结果为0的检测,程序需要对结果为0的情况进行全面考虑,确保正确的输出0。这个问题卡了好些同学好几天。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。