题目要求有两种情况,第一种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. OA系统出现窗口拦截的解决办法

    我们使用oa时候,有时候会出现“你打开了窗口拦截功能”.如图 出现窗口被拦截主要有三种情况,分别是IE浏览器本身拦截功能.第三方插件(如百度工具栏.搜搜工具栏.谷歌工具栏等).第三方浏览器拦截功能(如 ...

  2. JS杂记

    jQuery(function($) {等于<body onload ='rickk()'>function rickk() }

  3. log4j.xml(信息打印)

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SY ...

  4. Python 学习笔记2

    今天继续安装配置python. Fear can hold you prisoner. Hope can set you free.

  5. 读书有感——《从毕业生到程序员使用C#开发商业软件》

    本来想自己写个读书感悟之类的东西,但是苦于自己语文水平太差,算了,我把里面觉得很赞的内容摘抄下来就好了(学习都是从模仿开始的嘛). 书籍:<从毕业生到程序猿使用C#开发商业软件> 作者:袁 ...

  6. Mysql 锁机制

    innodb引擎提供了针对表级锁和行级锁 这个文章说的是行级锁 Lock有两种类型: 1,s-lock(共享锁),拥有该锁的transaction可以对row进行read操作 2,x-lock(排它锁 ...

  7. git 使用整理

    git使用 Ubuntu 14.04 安装 apt-get install git 版本查看 git --version git version 配置(全局变量,默认值.可在具体仓库中设置改仓库使用的 ...

  8. C++中为什么构造函数初始化列表

    已经有个构造函数负责初始化,为什么还需要构造函数初始化表呢? 在以下三种情况下需要使用初始化成员列表:一,需要初始化的数据成员是对象的情况:二,需要初始化const修饰的类成员:三,需要初始化引用成员 ...

  9. Eclipse的Console乱码

    1.找到服务器bin目录:例:D:\WebLogic_11g\Middleware\user_projects\domains\dsrhd_domain\bin, 在该目录下找到setDomainEn ...

  10. nginx libpcre.so.1: cannot open shared object file

    linux 64位安装nginx后启动出错报以下错误 1 2 3 [root@localhost nginx-1.3.0]# /usr/local/nginx/sbin/nginx error whi ...