题目1208:10进制 VS 2进制

本文介绍了一个C++程序,该程序可以将输入的十进制大整数转换为二进制,然后再将其转换回十进制。程序使用了自定义的转换函数和数组反转函数来完成这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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
****************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值