gpt4 book ai didi

c++ - 简单乘法后得到错误的结果 - C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:21 29 4
gpt4 key购买 nike

所以,需要做的是:输入一个实数,打印出它的小数点后前4位数字的和。例如:我输入 5.1010。我到了需要将 0.1010 乘以 10000 才能成为整数的地步,但我得到的结果是 1009 而不是 1010,之后一切都崩溃了。如果有人能向我解释为什么会这样,我将永远感激不已。

#include<iostream>
using namespace std;

int main()
{
double n;
cout<<"Enter a positive real number: ";
do
{
cin>>n;
if(n<=0) cout<<"The number must be positive, enter again: ";
}while(n<=0);

//storing the fractional part in a var
int y=n;
double fr=n-y;
//turning the fractional part into an integer
int fr_int=fr*10000;
cout<<fr_int<<endl;

//storing each of the digits in a var
int a=fr_int/1000;
int b=fr_int/100%10;
int c=fr_int/10%10;
int d=fr_int%10;

cout<<"The sum of the first 4 digits is: " << a+b+c+d;
return 0;
}

最佳答案

您可以按如下方式简单地更改代码,然后它应该可以正常工作。

  n *= 10000;
int Integer = n;

int i = 4;
int sum = 0;
while(i--)
{
sum += (Integer%10);
Integer /= 10;
}
std::cout << "The sum of the first 4 digits is: " << sum;

这是输出:https://www.ideone.com/PevZgn

更新:通用的 soln 将使用 std::string。但是,如果代码能够在用户提交非数字的情况下处理异常,那就太好了。

#include <iostream>
#include <string>

int main()
{
std::string Number;
double tempNum = 0.0;

std::cout << "Enter a positive real number: ";
do
{
std::cin >> Number;
tempNum = std::stof(Number);

if(tempNum <= 0)
std::cout << "The number must be positive, enter again: ";
}while(tempNum <= 0);

bool Okay = false;
int sum = 0;
int i = 4;

for(const auto& it: Number)
{
if(Okay && i > 0)
{
sum += static_cast<int>(it - '0');
--i;
}
if(it == '.') Okay = true;
}
std::cout << "The sum of the first 4 digits is: " << sum;

return 0;
}

关于c++ - 简单乘法后得到错误的结果 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49834708/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com