计算 10^9 中的数字C++

Calculation of digits in 10^9 in C++

本文关键字:数字 C++ 计算      更新时间:2023-10-16

我试图找到两个数字的 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 位,则它将溢出。请注意,由于您有签名类型,这实际上是未定义的行为。 要解决此问题,您要么需要制作 abg 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使类型名称更短。