我们应该使用哪种数据类型来输入一个介于 0<= 数字 <= 10^18 之间的数字
which data type should we use for taking input a number which is in between 0<= number <= 10^18
在下面的代码中,我遇到了运行时错误,我想输入一个介于 0<= a <= 10^18 之间的数字,一个是数字,以及我们应该使用哪种数据类型来获取像 10^18 这样的大数字,帮助
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
main()
{
int flag=1,cases;
long int j,i;
unsigned long long int a;
cin>>a;
if(a==0)
{
cout<<"yes";
}
else
{
unsigned long long int temp[a];
temp[0]=0;
cases=1;
i=1;
while(temp[i]!=a)
{
if(cases==1)
temp[i]=temp[i-1]+1;
else if(cases==2)
temp[i]=temp[i-1]+2;
else if(cases==3)
temp[i]=temp[i-1]+3;
cases++;
if(cases>3)
cases=1;
i++;
}
for(j=0;j<i;j++)
{
if(temp[j]==a)
{
cout<<"yes";
break;
}
if(j==i-1)
flag=0;
}
if(flag==0)
cout<<"no";
}
}
您在使用临时而不对其进行初始化。您确实将第一个元素设置为零,但随后从 1 开始迭代。更进一步,任何索引的温度应该如何等于a?不太可能 - 所以你的同时不会终止。迟早会出现运行时错误。
尝试添加
temp[a-1] = a;
在 while 循环之前
或者,也许你真的希望这段时间
while(i <a)
您已经在使用无符号的长整型,它足够大,可以容纳 18446744073709551615 (2^64 - 1) 或更大*http://www.cplusplus.com/reference/climits/
我的猜测是您的运行时错误是由其他原因引起的。不过,要小心使用可变长度数组。想想为数组分配 10^18 个无符号长整 int 需要多少内存?假设它映射到 64 位类型:每 * (10^18) 8 个字节是 ~ 7105 PB。
假设您正在使用无符号长整形向量。
vector<unsigned long long int> temp ;
如果你写cout<<temp.max_size();
它会给你多少个元素,Vector理论上可以管理多少元素,这取决于你的机器(((例如,如果你在RAM更大的计算机中写同样的东西,它会给你另一个数字)))。它不知道运行程序时实际有多少内存可用。假设 max_size() 给了我们一些数字,578910255011,假设你是 a=10^10,无符号长 = 8 字节,(10^10*8)/1024/1024/1024 = 9.31GB。所以你的RAM应该等于9.31Gb,这就是为什么它是一个运行时错误,因为RAM是正在运行的程序使用的内存。因此,要解决此问题,您应该增加RAM,对于10^12个无符号长元素= 931Gb,这将花费一大笔钱:)(如果您的计算机甚至可以支持那么多)或使用类似 STXXL 的东西
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 如何用数字处理log(0)
- 呼叫运营商<<临时
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何检查一个c++字符串中有多少相同的字符/数字
- 我怎样才能到达cout<<"排序:";;当C++中没有输入数字时