题目要求有两种情况,第一种from情况,正常输出即可,很简单.第二种是to情况,给一个数字,输出负进制R的原码,这个有点小麻烦...解决方法如下;

首先,把这个数n按正常方式展开,形式如下:

  .....(n/R^k) % R, (n/R^k-1) % R , (n/R^k-2) % R,......(n/R^2) % R , (n/R^1) % R , n % R;

    R^(k)      R^(k-1)      R^(k-2)      R^2      R^1    R^0

  (上下对应位相乘得n);

  但是我们这样展开如果直接输出是不可以的,因为这里面有可能有负数,不满足题目的要求,我们做如下处理:假设(n/R^k) % R是负的,我们给他加上-R(注意R为负数),使他变成(n/R^k) % R- R;

(n/R^k) % R - R一定是正数,我们发现新得到的这个数正好比原来的数大R^(K+1),所以我们只要再高一位的位置上加1就可以了,每次遇到负数,都做这样的处理,最后输出的就是正确的答案了!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
char a[],b[];
int num,R;
while(~scanf("%s",a))
{
if(a[] == 'e') return ;
int lena = strlen(a);
if(a[lena-] == '') R = -;
else R = -(a[lena-] - '');
if(a[] == 'f')
{
scanf("%s",b);
int lenb = strlen(b),ans = ;
for(int i = lenb-; i >= ; i--)
{
ans += powl(R,lenb--i)*(b[i] - '');
}
printf("%d\n",ans);
}
else
{
scanf("%d",&num);
if(!num)
{
puts("");
continue;
}
int res[],tot = ;
memset(res,,sizeof(res));
while(num)
{
int mod = num % R;
num /= R;
if(mod < )
{
mod += (-R);
num++;
}
res[tot++] = mod;
}
for(int i = tot-;i >= ;i--) printf("%d",res[i]);
puts("");
}
}
return ;
}

  

HDU 1887 Weird Numbers(负数的进制转化)的更多相关文章

  1. UVALive 3958 Weird Numbers (负进制数)

    Weird Numbers 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/F Description Binary number ...

  2. HDU 1197 Specialized Four-Digit Numbers (枚举+进制转化,简单)

    题意:让求从2992-9999中所有数字,满足10进制各位之和和12进制和16进制各位数字之和相等. 析:没啥可说的,只能枚举从2992-9999,每个进制都算一下. 代码如下: #include & ...

  3. HDU 6034 Balala Power!【排序/进制思维】

    Balala Power![排序/进制思维] Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java ...

  4. 【风马一族_C】进制转化

    #include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...

  5. c语言进制转化

    #include <stdio.h> // 进制转化 int main(void) { ; ; int i3 = 0x32C; printf( printf( printf("十 ...

  6. 编码/解码和进制转化工具hURL

    编码/解码和进制转化工具hURL   在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Li ...

  7. HDU5050:Divided Land(大数的进制转化与GCD)

    题意:给定大数A和B,求gcd.所有数字都是二进制. 思路:先输入字符串,再转化为大数,然后用大数的gcd函数,最后转化为字符串输出. 利用字符串和大数转化的时候可以声明进制,就很舒服的完成了进制转化 ...

  8. python数据结构:进制转化探索

    *********************************第一部分*************************************************************** ...

  9. 《N诺机试指南》(五)进制转化

    进制转化类题目类型: 代码详解及注释解答:  //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...

随机推荐

  1. Robot Framework开发系统关键字详细

    本文的目的,是记录如何在rf下,开发属于自己的库函数(又称之系统关键字) 1.首先在..\Python27\Lib\site-packages目录下创建自定义库目录如Verification_Libr ...

  2. Process 'command '/usr/lib/jvm/jdk1.8.0_25/bin/java'' finished with non-zero exit value 2

    这个问题有两种可能,第一是jar包或者依赖冲突(版本冲突也算).第二是65535. 对于65535的问题,请看http://blog.csdn.net/t12x3456/article/details ...

  3. 第三十六节,os系统级别操作模块

    在使用os模块时需要先 import os 引入模块 os.getcwd()模块函数 功能:获取当前工作目录,即当前python脚本工作的目录路径[无参] 使用方法:os.getcwd() 格式如:a ...

  4. LeetCode OJ 222. Count Complete Tree Nodes

    Total Accepted: 32628 Total Submissions: 129569 Difficulty: Medium Given a complete binary tree, cou ...

  5. 7.在第4题中Hello.class所在路径下, 输入命令:java Hello.class,会出现什么结果,为什么?

    java Hello已经是加载类了

  6. NSNotificationCenter消息通信机制

    作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息 [[NSNotificationCenter defaultCenter] ...

  7. Qt 5入门指南之Qt Quick编程示例

    编程示例 使用Qt创建应用程序是十分简单的.考虑到你的使用习惯,我们编写了两套教程来实现两个相似的应用程序,但是使用了 不同的方法.在开始之前,请确保你已经下载了QtSDK的商业版本或者开源版本,并且 ...

  8. laravel使用多个数据库连接

    1.配置.env文件 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database_name DB_USERNAME= ...

  9. C#中使用正则表达式提取超链接地址的集中方法

    一般在做爬虫或者CMS的时候经常需要提取 href链接或者是src地址.此时可以使用正则表达式轻松完成. Regex reg = new Regex(@"(?is)<a[^>]* ...

  10. 【转】How to build and install PHP 5.6.9 from source on Ubuntu 14.04 VPS

    原文 https://vpsineu.com/blog/how-to-build-and-install-php-5-6-9-from-source-on-ubuntu-14-04-vps/ In t ...