首页 > 其他分享 >P1017 [NOIP2000 提高组] 进制转换题解

P1017 [NOIP2000 提高组] 进制转换题解

时间:2024-03-21 18:33:06浏览次数:17  
标签:10 NOIP2000 进制 题解 P1017 余数 基数 十进制 除数

题目

我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所处位置为指数,以10为底数的幂之和的形式。例如123可表示为1×102+2×101+3×100这样的形式。

与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置为指数,以2为底数的幂之和的形式。

一般说来,任何一个正整数R或一个负整数−R都可以被选来作为一个数制系统的基数。如果是以R或−R为基数,则需要用到的数码为0,1,…,R−1。

例如当R=7时,所需用到的数码是0,1,2,3,4,5,6,这与其是R或−R无关。如果作为基数的数绝对值超过10,则为了表示这些数码,通常使用英文字母来表示那些大于9的数码。例如对16进制数来说,用A表示10,用B表示11,用C表示12,以此类推。

在负进制数中是用−R作为基数,例如−15(十进制)相当于(110001)−2​(−2进制),并且它可以被表示为2的幂级数的和数:

\left ( 110001 \right )_{-2}=1\times \left ( -2 \right )^{5}+1\times \left ( -2 \right )^{4}+0\times \left ( -2 \right )^{3}+0\times \left ( -2 \right )^{2}+0\times \left ( -2 \right )^{1}+1\times \left ( -2 \right )^{0}

设计一个程序,读入一个十进制数和一个负进制数的基数,并将此十进制数转换为此负进制下的数。

输入输出格式

输入格式

输入的每行有两个输入数据。

第一个是十进制数n。第二个是负进制数的基数R。

输出格式 

输出此负进制数及其基数,若此基数超过10,则参照16进制的方式处理。

输入输出样例

输入样例

30000 -2

输出样例

30000=11011010101110000(base-2)

解析

针对这个题目,我们之前是不断取余数,余数倒序为转换结果,所以余数不能出现负数,那怎么办呢?

我们只需要将商+1,余数-除数即可,因为余数(绝对值)一定小于除数,所以这样就可以将余数装换为正数

正确性证明:

(商+1)*除数+(余数-除数)=商*除数+除数+余数-除数=商*除数+余数=被除数
#include<iostream>
#include<cstdio> 
using namespace std;
char z[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
int n,m;
void zhuan(int n,int m){
	if(n==0) return;
	else{
		if(n>0||n%m==0){
			zhuan(n/m,m);
			printf("%c",z[n%m]);
			return;
		}
		else{
			zhuan(n/m+1,m);
			printf("%c",z[-m+n%m]);
			return;
		}
	}
}
int main(){
	cin>>n>>m;
	cout<<n<<"=";
	zhuan(n,m);
	printf("(base%d)",m);
	return 0;
}

标签:10,NOIP2000,进制,题解,P1017,余数,基数,十进制,除数
From: https://blog.csdn.net/m0_72674633/article/details/136916656

相关文章

  • CF1945E Binary Search 题解
    CF1945EBinarySearch题目大意给定一个\(1\simn\)的排列\(A\)(不保证有序),对这个排列用如下代码片段二分,查找\(m\)的位置。intl=1,r=n+1;while(r-l>1){intmid=(l+r)/2;if(A[mid]<=m) l=mid;else r=mid;}cout<<l;显然不一定能查找到正确位置,所以在......
  • 题解 P5809【【模板】多项式复合逆】
    \(\text{Link}\)力求把最新技术翻译地人人都能看懂。推荐先学习:拉格朗日反演。题意给出\(n\)次多项式\(F(x)\),求一个\(n\)次多项式\(G(x)\)满足\(F(G(x))\equivx(\bmodx^{n+1})\)。保证\([x^0]F(x)=0\)且\([x^1]F(x)\ne0\)。\(n\le2\times10^4\)。思路我们......
  • 20240320每日一题题解
    20240320每日一题题解Problem阿克曼(Ackermann)函数\(A(m,n)\)中,\(m,n\)定义域是非负整数(\(m\le3\),\(n\le10\)),函数值定义为:\(\mathit{akm}(m,n)=n+1\);(\(m=0\)时)。\(\mathit{akm}(m,n)=\mathit{akm}(m-1,1)\);(\(m>0\)、\(n=0\)时)。\(\mathit{akm}(m,n)=......
  • CF817F MEX Queries 题解
    题目链接:CF或者洛谷不是很难的题,但在这里提供一个动态开点线段树怎么卡空间卡过去的极致空间处理技巧全局\(mex\)问题,常见的做法就是维护权值树,然后找第一个没有权值的点,可以维护\(\min\),但本题存在第三个操作,所以不能再去传统地维护\(\min或者\max\)去辅助二分了。观......
  • [ARC174B] Bought Review 题解
    【题目描述】你开了一家店,有\(A_i\)个\(i\)星级评论,你可以花费\(P_i\)元买到一个\(i\)星评论,问使得这家店评论的星星平均值不小于\(3\),最少要花多少钱。\(1\lei\le5\)。【思路】首先读入,判断平均值是否小于\(3\),如果大于等于,直接输出\(0\)​然后根据\(3\t......
  • luogu6801题解
    本题解中不区别长度和宽度的区别,它们在本题解中指的是同一个东西。本题解做法用到单调栈。看这个特殊性质好像是让我们在高度上进行研究一下。子任务\(4\)的特殊性质是想让你搞明白在一个矩形中如何计算其内部的矩形个数。下面是一个\(4\times5\)大小的矩形。先来不考......
  • CF1091F 题解
    blog。提供线性做法,各方面完爆反悔贪心。先钦定能不飞就不飞,最后再分配盈余的能量。可能会在飞Lava的时候不够能量,只需要在前面来回移动,刷能量即可。由于Swim比Walk快,所以能Swim就全部用Swim刷能量,不能就Walk。最后是分配盈余能量。显然优先把Walk换成Fly,换一......
  • javascript:void(0);用法及常见问题解析
    javascript:void(0);是一个常见的JavaScript代码片段,通常用于在HTML中作为超链接的href属性值或者事件处理函数的返回值。下面是关于它的用法和常见问题的解析:用法:作为超链接的href属性值:<ahref="javascript:void(0);">点击这里</a>这样做的作用是让点击链......
  • Ubuntu E: 无法获得锁 /var/lib/dpkg/lock-frontend问题解决
    问题描述ubuntu18.04版本在更新出现:E:无法获得锁/var/lib/dpkg/lock-frontend-open(11:资源暂时不可用)即这个错误表明Ubuntu系统在尝试使用APT(高级包装工具)时无法获取一个锁文件。锁文件用于防止多个进程同时修改系统软件包数据库,以防止数据库损坏。错误信息中的“......
  • ARC174D Digit vs Square Root 题解
    ARC174DDigitvsSquareRoot题目大意给定\(N\),求有多少个正整数\(x(1\leqx\leqN)\)满足:在十进制表示下,\(\lfloorx\rfloor\)是\(x\)的前缀。Solve很难直接手推性质,考虑用如下程序打表:#include<bits/stdc++.h>#pragmaGCCoptimize(1,2,3,"Ofast","inline")usin......