zoukankan      html  css  js  c++  java
  • 集训作业 洛谷P1017 进制转换

    这个题的题目真的太恶心了。

    重点是他的题目描述和他的目标没啥关系。

    和最终目的有关系的只有这么一句话:”输出此负进制数及其基数,若此基数超过10,则参照16进制的方法处理。“

    我们通过看这句话可以发现,这就是个带负数进制的进制转换!!!

    所以一点都不难,但负数有时候会出现一些奇怪的事情,比如让他的余数变成负数。这样的话就要用到我们小学都学过的一个知识点了。

    一个数不够减怎么办?向前一位借。就是这么简单,我们把这个地方特判一下就好了。

    #include<iostream>
    #include<cstdio>
    #include<map>
    #include<cmath>
    using namespace std;
    long long s[1005];
    long long a,h,b,shu,zshu;
    string sz[20]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H"};
    int main()
    {
    	cin>>a>>b;
    	cout<<a<<"=";
    	while(a!=0)//又是经典的转换环节。
    	{
    		h++;
    		s[h]=a%b;
    		a/=b;
    		if(s[h]<0)//少减一次,加上b就是正数了,不知道为什么的同学请自行百度整数和负数的取余操作。
    		{
    			s[h]-=b;
    			a++;
    		}
    	}
    	for(int i=h;i>=1;i--)//倒叙输出
    	{
    		cout<<sz[s[i]];
    	}
    	printf("(base%lld)",b);
    	return 0;
    }
    

    总结:这个题依然和前几个差不多,重点是他那难读的题目和坑人的负数,但只要在多想几遍,多看几遍就可以做出来了。

  • 相关阅读:
    swift关键字
    Swift开发注意点
    Mac上安装lua
    Runtime运行时机制
    ios开发中如何选择图片的加载方式
    ios开发中的静态内存分析
    loadrunner-2-9添加事务
    loadrunner-2-8HTML和URL模式
    loadrunner-2-7设置关联
    loadrunner中Windows Resource没有数据或不可用
  • 原文地址:https://www.cnblogs.com/lichangjian/p/12853397.html
Copyright © 2011-2022 走看看