为什么意外值6295648在输出中带有答案11110001?在这里输入是241和2
why there is unexpected value 6295648 come with answer 11110001 in output?here input is 241 and 2
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;
}
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- 为什么thread_local变量在这里从未初始化?
- 为什么我必须在这里使用dynamic_cast
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 为什么 C++20 中的 [[可能]] 属性在这里引发警告?
- 我在这里正确传递参数了吗?
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- 移动语义在这里如何工作?
- 如何在这里循环运行?
- 为什么枚举变量在这里是右值?
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 试图美化这个Arduino代码[初学者在这里]
- 复制交换习惯用法-我们可以在这里使用动态强制转换操作吗
- 在这里使用删除运算符是否正确,我很困惑
- 如何使用模板生成整数序列在这里工作
- 为什么意外值6295648在输出中带有答案11110001?在这里输入是241和2