1295. 负权数
来源:互联网 发布:淘宝top100排行榜 编辑:程序博客网 时间:2024/04/28 04:11
在讨论之前,先看下面几个简单问题, 很简单的,就是几个除法,模除的表达式。
在程序中求.....
15 %4 = ?
15 %-4 = ?
-15 %4 = ?
-15% -4 =?
看看结果是多少呢?
回顾一下10进制转(m = 2,...16)进制的方法:
while(n)
{
取余数,如果余数大于9,则用字母表示;
n = n/m;
}
以上的做法对于m>0的都成立,也就是正权数。但是对于1295的负权数,按照原来的方法必然出现问题。
从简单开始分析: -15的-2进制表达式为110001:
-25000 -16 为 7FB8
因此,负进制同样保持着进位的规则,也就是每个表达式中的每位都是只有(0~|m|-1)中|m|个数字组成。
关键分析:
如果在while(n){}的循环中,某次取出的余数是负数,则需要转换为正数,
道理和模除有关,就像模除中 3%2 = 1, 3%2 = -1是一样的。因为不可能让一个表示
中出现负数,但是在计算机器中,求a%b的结果是正还是负数是由a的正负来决定的。
因此,关于负数的表达式算法应该为:
while(n)
{
x = n%m;
if(n>0||x == 0)
n = n/m;
else
{
n = n/m + 1;
x = x - m;
}
//记录x
}
***注意对0的特殊处理****
#include<string>#include<iostream>using namespace std;int A[100];char arr[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};void display(){int i=99;while(A[i]==0) i--;while(i>=0){cout<<arr[A[i]];i--;}cout<<endl;}int main(){int n,m,i,x;while(cin>>n){for(i=0;i<100;i++)A[i]=0;i=0;cin>>m;while(n){x = n%m; if(n>0||x == 0)n = n/m;else{n = n/m + 1;x = x - m;}A[i++]=x;}display();}return 0;}
- 1295. 负权数
- Sicily 1295. 负权数
- 1295. 负权数
- 负权数
- WOJ1316-负权数
- Sicily 1295 负权数 (SOJ 1295) 【进制转换】
- SQN在UMTS3G网络的鉴权数据中的使用
- 负分
- 负二进制
- 负能量
- 负能量
- 负能量
- 负能量
- 负负得正 之 ms sql
- 为什么会出现“负库存”、“负毛利”?
- 数学------为什么“负负得正”
- “负暄”的意思
- 周鹤洋中盘负
- Android源码编译相关问题汇总
- linux 文件颜色的含义
- 小BUG:OpenGL无法清屏
- Solaris资源监控命令汇总
- 软件测试易用性研究
- 1295. 负权数
- Journey Start
- linq 查询和使用方法
- Android之Adapter的使用合集
- jquery ajax里面的datetype设成json时,提交不了数据的问题
- Android中修改设备权限
- JAVA项目之SSH编码规范
- Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
- maven核心,pom.xml详解