您的位置:首页 > 编程语言 > PHP开发

XDOJ_1007解题报告

2011-11-20 14:03 267 查看
 题目描述:[高精度][二进制][ 1的个数]
Xi Dian Online Judge 1007 做一名正气的西电人
两人各写一个数字,然后转化为二进制,谁的数字中二进制1多谁就比较正气。

Input  输入包含多组数据,EOF结束。 每组数据包含两行,代表两个非负整数a,b(0<=a,b<10^100,不含前导0),a为wm写的数字,b为zyf写的数字。

Output  每组数据输出一行,输出正气的西电人名字"wm"或"zyf",如果两人的数字中二进制1一样多就输出"neither"。

自己的程序:

#include <stdio.h>
int start,end;
char arr[1031000];
int procedure(char arr[]){ //除以一次2求余
int p,n=0;p=start;
while (p<=end){
if (p==end){
if (arr[p]=='0') start++;
else {
n=(arr[p]-'0')%2;
arr[p]=(arr[p]-'0')/2+'0';}
}
else {
if (arr[p]<'2'){
if (p==start) start++;
arr[p+1]+=(arr[p]-'0')*10;
}
else {
arr[p+1]+=(arr[p]-'0')%2*10;
arr[p]=(arr[p]-'0')/2+'0';
}
}
p=p+1;
}
return n;
}
int main(){
int n=0,sum1=0,sum2=0;
char ch;
while (scanf("%s",arr)!=EOF){
n=strlen(arr);sum1=0;sum2=0;
start=0;end=n-1;
while (start<=end)
sum1+=procedure(arr);
scanf("%s",arr);
start=0;n = strlen(arr);end=n-1;
while (start<=end)
sum2+=procedure(arr);
if (sum1>=sum2)
if (sum1==sum2) printf("neither\n");
else printf("wm\n");
else printf("zyf\n");
}
return 0;
}


 

感觉程序挺混乱的。。就是。。main函数很复杂。。以至于x轩都不愿意帮我改代码了。。虽然是分出来了一个函数,还是超级复杂。多次调用的函数也是具有很高的复杂度,语句混乱多个语句实现简单意思。。还需改进。。

收获:c语言的字符串读取一直很蛋疼,总是为了稳定要自己一个一个字符读取,最后还是搞出了麻烦,复杂程度高,难以预测,不能保证稳定性呢。。

复杂的高精度运算给我弄的更加复杂了还需要继续努力啊!

 

X轩的程序(15分钟哎。。):

#include<stdio.h>
#include<string.h>
char str1[300],str2[300];
int work(char * str);

void init(void)
{
int l1,l2;
while (scanf("%s%s",str1,str2) != EOF) {
l1 = work(str1);
l2 = work(str2);
if (l1 > l2) printf("wm\n");
else if (l1 < l2) printf("zyf\n");
else printf("neither\n");
}
}
int work(char * str)
{
int  num[300],len = strlen(str),sum = 0,i,j;
for(i = 1;i <= len;i++)
num[i] = str[len-i] - '0';
while (len > 0) {
for(i = len;i > 1;i--) {
num[i-1] += (num[i] % 2) * 10;
num[i] /= 2;
}
sum += num[1] % 2;
num[1] /= 2;
while (num[len] == 0) len--;
}
return sum;
}

int main()
{
init();
return 0;
}
main里面只有一个过程,显得很紧凑没有冗余的内容,是高精度的比较标准的程序了。字符串的输入 字符数组再转为数字数组 方便解决 倒序解决,解决一般情况后再解决特殊情况是循环构造的必要途径,方便检查,不容易出错。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  output input 语言 c