设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1632|回复: 0
打印 上一主题 下一主题

关于The C++ Programming Language中的一个习题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-4 00:47:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是The C++ Programming Language中的一道习题,就是把一个整数按照给定进制输出.
#include <assert.h>
#include <limits>
#include <stdexcept>
#include <string>
#include <iostream>
using namespace std;
namespace { char const digit[] = "0123456789ABCDEF"; }
void print(int value, int base = 10) {
int const MXS = 128; // Maximum number of digits
assert((numeric_limits<int>::radix==2)
& (numeric_limits<int>::digits<=MXS));
if ((base<2) | (base>16))
throw std::domain_error(std::string("Print error"));
char rep[MXS+2];
rep[MXS+1] = '\0'; // Place an end-of-string marker
if (value<0) { // Add in the sign if needed
rep[0] = '-'; // This may have to move later
value = -value;
} else
rep[0] = '+';
char *p = rep+MXS; // Start at the end
do { // Move back, inserting digits as you go
*p-- = digit[value%base];
value = value/base;
} while (value);
*p = rep[0]; // Place the sign just before the most
// significant digit.
std::cout << p;
}

int main() {
for (int base = 10; base<11; ++base) {
std::cout << "1000 in base " << base << ": ";
print(1000, base);
std::cout << '\n';
}
return 0;
}
我有两个问题:
1. char *p = rep+MXS; 这有什么作用.
2.这是分步执行的结果:
  1000 in base 10: ?烫1烫0烫0烫0
 这是直接运行的结果:
    1000 in base 10: +1000
    Press any key to continue
 为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 19:54 , Processed in 0.088916 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表