免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1831 | 回复: 3
打印 上一主题 下一主题

一个关于unsigned 和 long long的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-13 10:02 |只看该作者 |倒序浏览
题目:将n转换为k(2<= k <=36)进制,int NumConvert(int n, int k)

代码如下:

  1. #include<iostream>
  2. using namespace std;
  3. int NumConvert(int n, int k){
  4.    
  5.     unsigned m;
  6.     if(k<2||k>36)return -1;
  7.     if(n<0){
  8.         m=(unsigned)-n;
  9.         printf("-");
  10.     }
  11.     else m=n;
  12.     if(m==0){
  13.         printf("0");
  14.         return 0;
  15.     }
  16.     char a[100];
  17.     int j=0;
  18.     unsigned temp;
  19.     while(m){
  20.         temp=m%k;
  21.         if(temp<10)a[j++]=temp+'0';
  22.         else a[j++]=temp-10+'A';
  23.         m/=k;
  24.     }
  25.     while(j--){
  26.         printf("%c",a[j]);
  27.     }
  28.     return 0;
  29. }
复制代码
问题:一开始我写,没转换为unsigned,在线系统一直提示结果错误。

为什么要将n,首先转换为unsigned 类型,这样有什么好处。

论坛徽章:
0
2 [报告]
发表于 2010-04-13 10:06 |只看该作者
没将n转换为unsigned 和 将n先转换为unsigned进行测试

测试的输出结果都一样

那有什么情况可以使2者结果不一样吗?

论坛徽章:
0
3 [报告]
发表于 2010-04-16 11:38 |只看该作者
恩 一次忽然明白了 呵呵~~

int型的负数范围为 -32768~32767,当测试数据成为-32768时就不一样了


应该注重边界测试

论坛徽章:
0
4 [报告]
发表于 2010-04-16 11:40 |只看该作者
回复 3# 河边一支柳


    在16位系统下是这样,但在32位系统下int和long基本上等价了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP