以后补充

模拟退火算法、遗传算法、随即猜测与爬山法

参考博客:https://blog.csdn.net/bcj296050240/article/details/50839806

转载于:https://www.cnblogs.com/ivanxy/p/10293693.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,接下来我会逐行解释这段代码的具体实现: ```c++ using namespace std; // 将十进制数转换为二十八进制 list<char> DecTo2816(double d, unsigned r) { stack<char> intPart; // 存储整数部分的转换结果 queue<char> fraPart; // 存储小数部分的转换结果 list<char> result; // 存储总的转换结果 int intp = (int)d; double frap = d - intp; // intp-整数值,frap-小数值 int res; // 表示余数或某数值的整数部分 while (intp) { // 转换整数部分:将余数转换为字符存入 stack<char> intPart res = intp % r; // 取余,若余数<=9则存入对应数字字符,否则存入’A’及以后字母 if (res <= 9) { intPart.push(res + '0'); } else { intPart.push(res - 10 + 'A'); } intp /= r; // 除以进制数 } while (!intPart.empty()) { // 将 stack<char> intPart 数据存入到 list<char> result result.push_back(intPart.top()); intPart.pop(); } if (frap == 0) { return result; // 如果 d 不包含小数部分则无须继续转换 } // 以下为转换小数部分,转换结果放入 queue<char> fraPart result.push_back('.'); for (int k = 1; k <= 5; k++) { // 转换结果最多保留到小数点后面 5 位 frap = frap * r; res = (int)frap; // 小数部分乘 r 取整 if (res <= 9) { fraPart.push(res + '0'); } else { fraPart.push(res - 10 + 'A'); } frap -= res; // 取小数部分 } while (!fraPart.empty()) { // 将小数部分的转换结果存入 list<char> result result.push_back(fraPart.front()); fraPart.pop(); } return result; } // 用于输出数据的函数模板 template<class T> void Print(T &t) { cout << t; } // 用于输出 list 的函数模板 template<class T> void ShowList(list<T> &l) { for_each(begin(l), end(l), Print<T>); cout << endl; } int main() { list<char> r = DecTo2816(1000.789, 16); // 将 1000.789 转换为十六进制的结果 ShowList(r); // 输出结果 return 0; } ``` 首先,代码使用了 `using namespace std;`,表示使用 `std` 命名空间中的所有成员。 接下来是 `DecTo2816` 函数,用于将十进制数转换为二十八进制。函数的参数包括一个双精度浮点数 `d` 和一个无符号整数 `r`,表示要将 `d` 转换为 `r` 进制数。函数的返回值是一个 `list<char>` 类型的容器,存储着转换结果。 函数首先定义了三个容器:`stack<char> intPart` 用于存储整数部分的转换结果,`queue<char> fraPart` 用于存储小数部分的转换结果,`list<char> result` 用于存储总的转换结果。 之后,函数将 `d` 分为整数部分和小数部分,分别存储在 `intp` 和 `frap` 中。接着,函数使用循环将整数部分转换成 `r` 进制数,将余数存储在 `stack<char> intPart` 中。在转换过程中,如果余数小于等于 9,则将其转换为对应的数字字符存储,否则将其转换为 A 及其以后的字母。转换完成后,再将 `stack<char> intPart` 中的数据存储到 `list<char> result` 中。 如果 `d` 不包含小数部分,则直接返回 `list<char> result`。否则,函数继续将小数部分转换为 `r` 进制数,转换结果存储在 `queue<char> fraPart` 中。转换过程中,函数使用循环将小数部分乘以 `r`,然后将乘积的整数部分存储在 `queue<char> fraPart` 中。同样的,如果整数部分小于等于 9,则将其转换为对应的数字字符存储,否则将其转换为 A 及其以后的字母。转换完成后,再将 `queue<char> fraPart` 中的数据存储到 `list<char> result` 中。 最后,函数返回 `list<char> result`。 接下来是两个函数模板:`Print` 和 `ShowList`。`Print` 用于输出数据,`ShowList` 用于输出 `list` 容器中的数据。这里使用了 `for_each` 算法和函数指针,对容器中的每个元素依次调用 `Print` 函数输出。 在 `main` 函数中,我们调用 `DecTo2816` 函数将 1000.789 转换为十六进制的结果,然后调用 `ShowList` 函数输出结果。 以上就是这段代码的具体实现,希望能够对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值