#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(int *p, int *q)
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
void reverse(int arr[], int left, int right)
{
int i;
for(i = left; i <= (left+right)/2; i++)
swap(arr + i, arr + left + right - i);
}
/*将m进制的大数X所在数组arr_m[]转换为n进制数组arr_n[],并求arr_n[]数组的长度*/
void m_to_n(int arr_m[], int arr_n[], int m, int n, int m_len, int *pn)
{
*pn = 0; //arr_n数组长度清0
int i, j;
for(i = 0; i < m_len;) //不断地将X除以n,并将余数存入arr_n[],直到X为0
{
int r = 0; //余数清0
for(j = i; j < m_len; j++) //将大整数除以n,余数存入r
{
int temp = arr_m[j] + m * r;
r = temp % n;
arr_m[j] = temp / n;
}
arr_n[(*pn)++] = r; //将余数r对应的字符写入n数组
while(arr_m[i] == 0) //略过为0的高位
i++;
}
reverse(arr_n, 0, *pn - 1); //将arr_n[]逆置
}
int main()
{
char s[1010];
int dec[1010] = {0};
int bin[4000] = {0};
while(gets(s) != NULL)
{
int dec_len = strlen(s);
int bin_len = 0;
int *pd = &dec_len;
int *pb = &bin_len;
int i;
for(i = 0; i < dec_len; i++) //将读入的字符串转换为整数数组
dec[i] = s[i] - '0';
m_to_n(dec, bin, 10, 2, dec_len, pb);
reverse(bin, 0, bin_len - 1);
m_to_n(bin, dec, 2, 10, bin_len, pd);
for(i = 0; i < dec_len; i++)
printf("%d", dec[i]);
printf("\n");
}
//system("pause");
return 0;
}
/**************************************************************
Problem: 1208
User: 刘嘉庆
Language: C++
Result: Accepted
Time:50 ms
Memory:1020 kb
****************************************************************/
题目1208:10进制 VS 2进制
最新推荐文章于 2024-05-06 09:16:55 发布