您的位置:首页 > 其它

【WA】题目1208:10进制 VS 2进制

2013-08-13 23:46 316 查看
题目描述:

    对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。

    例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

输入:

    一个1000位(即10^999)以内的十进制数。

输出:

    输入的十进制数的二进制逆序数。

样例输入:
173


样例输出:
181

代码:

#include <stdio.h>
#include <string.h>
struct bigInteger {
int digit[1000];
int size;
void init() {
for(int i = 0;i < 1000;i++)
digit[i] = 0;
size = 0;
}
void set(char str[]) {
init();
int len = strlen(str);
int tmp = 0;
int c = 1;
int j = 0;
for(int i=len-1;i>=0;i--) {
tmp += (str[i] - '0') * c;
c *= 10;
j++;
if(j==4 || i==0) {
digit[size++] = tmp;
c = 1;
j = 0;
tmp = 0;
}
}
}
void set_i(int x) {
init();
do{
digit[size++] = x % 10000;
x /= 10000;
}while(x!=0);
}
bigInteger operator / (int x) const {
bigInteger ret;
ret.init();
int remain = 0;
for(int i=size-1;i>=0;i--) {
int t = (digit[i] + 10000*remain) / x;
int r = (digit[i] + 10000*remain) % x;
remain = r;
ret.digit[i] = t;
}
for(int i=0;i<1000;i++)
if(digit[i]!=0) ret.size = i;
ret.size++;
return ret;
}
int operator % (int x) const {
int remain = 0;
for(int i=size-1;i>=0;i--) {
int r = (digit[i] + remain * 10000) % x;
remain = r;
}
return remain;
}
bigInteger operator * (int x) const{
bigInteger ret;
ret.init();
int carry = 0;
for(int i=0;i<size;i++) {
int tmp = digit[i] * x + carry;
carry = tmp / 10000;
ret.digit[ret.size++] = tmp % 10000;
}
if(carry!=0)
ret.digit[ret.size++] = carry;
return ret;
}
bigInteger operator + (const bigInteger &A) const {
bigInteger ret;
ret.init();
int carry = 0;
for(int i=0;i<size || i<A.size;i++) {
int tmp = digit[i] + A.digit[i] + carry;
carry = tmp / 10000;
ret.digit[ret.size++] = tmp % 10000;
}
if(carry != 0)
ret.digit[ret.size++] = carry;
return ret;
}
void output() {
for(int i=size-1;i>=0;i--) {
if(i!=size-1)
printf("%04d",digit[i]);
else
printf("%d",digit[i]);
}
printf("\n");
}
}a,b;

char str[1010];
int ans[10000];
int main() {
while(scanf("%s",str)!=EOF) {
a.set(str);
int size = 0;
do{
int r = a % 2;
a = a / 2;
ans[size++] = r;
}while(a.digit[0]!=0 || a.size!=1);
char s1[10],s2[10];
a.set_i(1);
b.set_i(0);
for(int i=size-1;i>=0;i--) {
b = a * ans[i] + b;
a = a * 2;
}
b.output();
}
return 0;
}


不知道哪里出了问题,又是WA。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: