为什么意外值6295648在输出中带有答案11110001?在这里输入是241和2

why there is unexpected value 6295648 come with answer 11110001 in output?here input is 241 and 2

本文关键字:在这里 11110001 输入 答案 6295648 意外 输出 为什么      更新时间:2023-10-16
void base(int n,int b)
{
    int x[20],k=0;
    while(n!=0)
    {
        x[k]=n%b;
        n=n/b;
        k=k+1;
    }
    for(int i=0;i<=k;i++)
    {
        cout<<x[k-i];
    }
    return ;
}
int main()
{
    int number,baise;
    cin>>number;
    cin>>baise;
    base(number,baise); 
    return 0;
}

它是基础扩展程序。我为此写了一个函数,在main()中,我称其为2个参数(我想转换为另一个碱基)和baise(这是一个数字转换为基础值)。该程序运行,它也提供输出,但是输入给出了一些不良值,在这种情况下为6295648。

输入:

241  
2

输出

629564811110001    

,但输出应仅为11110001。我不明白为什么值6295648出现。

for(int i=0;i<=k;i++)
{
    cout<<x[k-i];
}

在循环的第一次迭代中,执行的语句为:

cout << x[k];

从未分配x[k]的情况,这是UB。

将循环初始化语句更改为x = 1解决了此问题。或更清楚,

for(int i = k-1; i >= 0; i--)
{
    cout << x[i];
}

您的代码问题是 k获得 post x[]数组中的分配,即在最后一次迭代中, k被递增至 8。然后在k-i的情况下,当i的值为0时。x[k-i]脱离界限。

#include <iostream>
using namespace std;
void base(int n,int b)
{
    int x[20],k=-1;
    while(n!=0)
    {
        x[++k]=n%b; //pre increment
        n=n/b;
    }
    for(int i=0;i<=k; i++)//now k contains the index of the last element
    {
        cout<<x[k-i];
    }
    return ;
}
int main()
{
    int number,baise;
    cin>>number;
    cin>>baise;
    base(number,baise); 
    return 0;
}