文章

19

粉丝

69

获赞

30

访问

17.9k

头像
admin发布的参考代码
P1176 清华大学上机题
发布于2023年8月5日 10:41
阅读数 1.4k

#include <bits/stdc++.h>

using namespace std;

const int maxn = 4000;  // 因为输入的10进制不超过1000位,则转换成2进制应该不超过4000位(2^4 = 16)
const int oldBase = 10; // 原始进制
const int newBase = 2;  // 新进制

string str; // 因为输入为不超过1000位的10进制数则应该用字符串接收
/*
 * 数组的 0 号元素均用于存储数组的长度
 */
int br[maxn] = {0}; // 存储2进制
int dr[maxn] = {0}; // 存储10进制
int drans[maxn] = {0}; // 存储10进制转2进制的过程中的商,并且存储将 2 进制转换到 10 进制的过程中 的2^n
int drres[maxn] = {0}; // 存储10进制转2进制的过程中的余数

// 将字符串str存到dr int数组中,dr[0]记录10进制数组长度
void change()
{
    memset(dr, 0, sizeof(dr)); // 使用0初始化dr数组
    dr[0] = 0;      // 使用 dr[0] 存储数组长度
    for(int i = 1; i <= str.length(); ++i)
    {
        dr[++dr[0]] = str[i-1]-'0';
    }
}

// 将 10 进制转换成 2 进制
void solve()
{
    memset(drres, 0, sizeof(drres)); // 使用0初始化drres函数

    int y, i, j, k;
    // 模 n 取余法,(总体规律是先余为低位,后余为高位)
    while(dr[0] >= 1)
    {
        // 只要被除数仍然 >= 1,则继续操作
        y = 0;
        i = 1;
        drans[0] = dr[0];       // 商的长度与被除...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发