关于int溢出

遇到int 溢出的背景(其中涉及一道简单的编程题,题目出自蓝桥杯2019年C/C++大学A组)

初次练习蓝桥杯的题,竟然发现学习了一年多编程相关知识,竟然不知如何解决int 溢出的问题,具体题目如下

小明对数位中含有2、0、1、9的数字很感兴趣,在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574,平方和是14362。注意,平方和是指将每个数分别平方后求和。请问,在1到2019中,所有这样的数的平方和是多少?

题目很简单,当然以我不太灵活的逻辑思维,简单的想着除却一位整数,剩下的多位整数只要经过逐位求出每一位的数字,判断是否是0,1,2,9即可,于是得到如下代码

#include <iostream>
using namespace std;
int main()
{
   
    int sum = 0 ;//sum为所有总数平方和
    sum = 1 * 1 + 2 * 2 + 9 * 9 + 10 * 10;
    for (int i = 11; i <= 2019; i++)
    {
   
        
C++中,构造一个哈希表(如std::unordered_map或std::unordered_set)时,如果插入的键值对过多且哈希函数的冲突处理不当,可能会导致哈希冲突,即所谓的“自然溢出”。这种情况下,通常的做法包括开放寻址法(例如线性探测、二次探测等)或链地址法,其中每个哈希桶可以包含多个元素。 然而,对于字符串作为键的情况,直接构造一个超出哈希表容量的超长字符串并不会使其“溢出”,因为哈希表不会自动调整大小。如果你想模拟这种情况,一种可能的方式是在循环中不断增加字符串长度,直到超过哈希函数的最大范围: ```cpp #include <iostream> #include <string> std::string createOverflowString(size_t maxBucketSize) { std::string overflowString; for (size_t i = 0; i <= maxBucketSize; ++i) { overflowString += "a"; // 使用相同的字符增加字符串长度,理论上可以无限添加 } return overflowString; } int main() { size_t maxBucketSize = std::numeric_limits<std::hash<std::string>::result_type>::max() / sizeof(std::string::value_type); std::string overflow = createOverflowString(maxBucketSize); std::cout << "Overflow string length: " << overflow.length() << std::endl; return 0; } ``` 在这个示例中,`maxBucketSize`是一个假设的最大哈希槽数,我们创建了一个尽可能长的字符串直到达到这个长度。注意这并不是真正的哈希冲突,只是演示了如何构造一个非常大的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值