价值的奇怪下降

时间:2019-05-12 17:29:16

标签: c++

好的,所以我试图将一个数组的一部分转换成一个数字并“删减”它,但是当我这样做时,有时它会突然减少。

int c                   = 0;
unsigned long long nnum = 0; 

for (int i = 1; i <= numsize; i++)
{
    if ((i <= li) || (i >= ri))
    {
        // in my example li=4,ri=6, i skip element [5]
        // anum is reversed array of digits in the number
        nnum += anum[i] * (pow(10, c++));
        cout << nnum << ' ' << anum[i] << ' ' << anum[i] * pow(10, c - 1)
             << endl;  // checking
    }
}
cout << nnum;
return 0;

我的控制台的副本:

输入数字:12300980

0 0 0

80 8 80

979 9 900

979 0 0

30978 3 30000

230978 2 200000

1230978 1 1e + 006

1230978

您可以看到,第一步是最后一位数字0,nnum是0,我们加了0。下一个我们加了80(80 * 10 ^ 1),我们得到80。下一步我们加了900并得到979,为什么? 它减少了一个时间,然后...完全不知道。

UPD:所有代码:

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

int main() {
    unsigned long long num,nnum;
    int numsize=0;
    int anum [1000]={0};
    cout<<"Enter a number: ";
    cin>>num;
    int c=1;
    while (num>0) {
        numsize++;
        anum[c++]=num%10;
        num=num/10;
    }
    int mind=10,maxd=-1,mini,maxi;
    for (int i=numsize;i>=1;i--) {
        if (anum[i]<mind) {
            mind=anum[i];
            mini=i;
        }
        if (anum[i]>maxd) {
            maxd=anum[i];
            maxi=i;
        }
    }
    int li=min(maxi,mini);
    int ri=max(maxi,mini);
    c=0;nnum=0;
    for (int i=1;i<=numsize;i++) if ((i<=li)||(i>=ri)) {
        nnum+=anum[i]*(pow(10,c++));

        cout<<nnum<<' '<<anum[i]<<' '<<anum[i]*pow(10,c-1)<<endl;
    }
    cout<<nnum;
    return 0;
}

完整的任务是输入数字,将其转换为数组,然后将不在第一个最大值和第一个最小值之间的所有内容都转换回一个数字并进行引用。

1 个答案:

答案 0 :(得分:0)

尽管pow()仅使用整数,但函数本身是使用double类型计算的,并使用多项式计算幂。根据您的体系结构和编译器,如果您喜欢pow(10, 2),可能会到达99.9999999..,在计算结束并被截断为int时,您会得到979

或者舍入结果(转换为int之前),或者出于速度原因,如果目标是仅将其用于整数,则想出自己的power()函数