继续贴C语言编程题

来源:百度知道 编辑:UC知道 时间:2024/06/21 06:22:29
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为101011101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数

输入:
一个1000位(即10999)以内的十进制数。
输出:
输入的十进制数的二进制逆序数。
大家给的答案我都试验过了 一旦涉及到大数 最后的输出都是负数 请大家再修正一下
另外 输入数的范围是不超过10^999,所以输出数也仍可能很大,如果程序里的最终输出是以int输出的话,一般来说就不行。。。

再对了...设定了20000位,应该够了,好麻烦..

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int m[20000] = {0};
int digit = 1;
int *result(int *a,int n);
void num(int n);
int main()
{
char a[1000] = {'\0'}, *p;
int s[50000], i, j = 0;
scanf("%s", a);
int size = (int)strlen(a);
while(1)
{
for(i = 0; i < size ; i++)
{
if(a[i] <= '1')
{
if(i == (size-1))
{
s[j] = int(a[i] - '0') % 2;
a[i] = '0';
j++;
break;
}
else
{
a[i+1] += ((a[i] - '0') % 2) * 10;
a[i] = '0';
continue;
}
}
if(i == (size-1))
{
s[j] = int(a[i] - '0') % 2;
j++;
a[i] = (int(a[i] - '0') / 2 + '0');
continue;