3031. 二进制倒置

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {int dec[105]; int bin[335]; int cnt;}Big;
void decTurnToBin(Big *n)
{
int i=0, j, lend=0, all, check, c=0;
for(j=0; j<335; j++) n->bin[j]=0;
while(n->cnt)
{
lend=0;
n->bin[i++]+=(n->dec[0])%2;
if(n->dec[n->cnt-1]<2){n->cnt--;lend=1;check=1;}
for(j=n->cnt-1; j>=0; j--)
{
if(n->cnt>1) all=lend*10+n->dec[j];
else if(check==1) all=lend*10+n->dec[j];
else all=n->dec[j];
n->dec[j]=all/2;
lend=all%2;
check=0;
}
}
n->cnt=i;
}
void binTurnToDec(Big *n)
{
int i, j, k;
for(i=0; i<n->cnt; i++)
{if(n->bin[i]) break;}
for(j=0; j<105; j++) n->dec[j]=0;
for(; i<n->cnt; i++)
{
for(k=0; k<104; k++)
{
n->dec[k]*=2;
n->dec[k]%=10;
}
n->dec[0]+=n->bin[i];
for(k=0; k<104; k++)
if(n->dec[k]>9)
{
n->dec[k+1]+=n->dec[k]/10;
n->dec[k]%=10;
}
}
}
int main()
{
int T, I;
scanf("%d",&T);
getchar();
for(I=0; I<T; I++)
{
Big n;
char num[105];
gets(num);
int l=strlen(num), i;
for(i=0; i<105; i++) n.dec[i]=0;
for(i=0; i<335; i++) n.bin[i]=0;
for(i=0; i<l; i++)
n.dec[i]=num[l-i-1]-'0';
n.cnt=i;
if(l==1 && num[0]=='0') n.cnt=0;
if(n.cnt)decTurnToBin(&n);
if(n.cnt)binTurnToDec(&n);
printf("case #%d:\n",I);
for(i=104; i+1; i--) if(n.dec[i]) break;
for(; i+1; i--) printf("%d",n.dec[i]);
if(n.cnt==0) printf("0");
printf("\n");
}
return 0;
}


#include "bits/stdc++.h"

using namespace std;

using BigUIntDecimal = vector<uint8_t>;
using BigUIntBinary = vector<bool>;

static string raw;
is >> raw;

BigUIntDecimal ret;
transform(rbegin(raw), rend(raw), back_inserter(ret), [](auto d) { return d - '0'; });

return ret;
}

uint8_t rem_div_by_2(BigUIntDecimal& decimal) {
uint8_t remainder = 0;
for (auto i = decimal.rbegin(); i != decimal.rend(); ++i) {
auto digit = (remainder * 10) + *i;
*i = digit / 2;
remainder = digit % 2;
}
return remainder;
}

BigUIntBinary to_chopped_binary(BigUIntDecimal&& decimal, uint32_t cnt) {
BigUIntBinary ret(cnt, 0);
for (uint32_t i = 0; i != cnt; ++i) {
ret[i] = rem_div_by_2(decimal);
}
return ret;
}

void reverse(BigUIntBinary& num) {
reverse(
find(rbegin(num), rend(num), 1),
rend(num)
);
}

BigUIntDecimal to_decimal(BigUIntBinary const& binary) {
BigUIntDecimal decimal;

for (uint32_t i = binary.size() - 1; i != -1; --i) {
decimal.push_back(0);

for (auto& digit : decimal) {
digit *= 2;
}

for (uint32_t j = 0, end = decimal.size() - 1; j != end; ++j) {
if (decimal[j] >= 10) {
decimal[j] -= 10;
decimal[j + 1] += 1;
}
}

if (binary[i] == 1) {
decimal.push_back(0);
decimal[0] += 1;
uint32_t pos = 0;
while (decimal[pos] >= 10) {
decimal[pos] -= 10;
decimal[pos + 1] += 1;
pos += 1;
}
}
}

while (!decimal.empty() && decimal.back() == 0) {
decimal.pop_back();
}

if (decimal.empty()) {
decimal.push_back(0);
}

return decimal;
}

ostream& operator<<(ostream& os, BigUIntDecimal const& num) {
transform(rbegin(num), rend(num), ostream_iterator<char>(os), [](auto i) { return i + '0'; });
return os;
}

int main() {
uint32_t t;
cin >> t;

for (uint32_t  i = 0; i != t; ++i) {
cout << "case #" << i << ":\n";

auto big_binary = to_chopped_binary(move(big_decimal), 334);
reverse(big_binary);
big_decimal = to_decimal(big_binary);

cout << big_decimal << '\n';
}
}

n = int(input())
i = 0
while i < n:
v = int(input())
print("case #%d:"%i)
v = bin(v)[2:];v = v[::-1]
v = int(v,2)
print(v)
i = i + 1


It’s a non-pythonic program.
You should write like this.

print('\n'.join([f"case #{i}:\n{int(bin(int(input()))[2:][::-1],2)}" for i in range(int(input()))]))


I’m a beginner in Python, and I think your code is not very readable

It’s just a satire.