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;
    }
    

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

  • 相关阅读:
    iOS 9适配系列教程:后台定位
    入行几年后,互联网人的未来应该在哪里?
    iOS iOS8注册通知
    Warning!程序员们小心被技术绑架
    2015 Objective-C 三大新特性
    怎么面试架构师
    移动Web资源整理
    利用微信提高APP下载的3个推广方式!
    Audio Session Programming Guide
    iOS 设计
  • 原文地址:https://www.cnblogs.com/lichangjian/p/12853397.html
Copyright © 2011-2022 走看看