计算 10^9 中的数字C++
Calculation of digits in 10^9 in C++
我试图找到两个数字的 lcm,对于其中一个输入情况(28851539 和 1183019(,我的程序返回负值。显然它无法计算 (28851529*1183019(/9 .
#include <iostream>
long long gcd(int a, int b) {
long long int temp;
if(a%b==0)
{
return b;
}
else
{
temp=a%b;
return gcd(b,temp);
}
}
long long lcm(int a, int b , int g) {
//std::cout<<g;
long long int f=(a*b)/g;
return f;
}
int main() {
long long int a, b;
std::cin >> a >> b;
long long int g = gcd(a,b);
long long int q=lcm(a, b, g);
std::cout << q << std::endl;
return 0;
}
我如何准确计算?
你的问题是
long long int f=(a*b)/g;
由于(a*b)/g
中的所有类型都int
,因此这将计算为int
,如果int
为 16 或 32 位,则它将溢出。请注意,由于您有签名类型,这实际上是未定义的行为。 要解决此问题,您要么需要制作 a
,b
或g
long long int
,或者您可以更改函数的参数以使它们全部long long int
。
long long int lcm(long long int a, long long int b , long long int g)
如果您不处理负数,我还建议您使用unsigned long long int
。 如果不是,则可以使用<cstdint>
中的类型uint64_t
,否则int64_t
使类型名称更短。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在将数字随机生成为数组期间从内存输出随机数的数组