我想设置一个数组,长度为输入数字的数位。。。。
我发现我做的很多题 都有这个现象,就是要求数组上限很高,但用不完,用不完的部分会影响输出结果,所以我想怎么让未使用的部分消失,然后满足条件#include<iostream>
using namespace std;
int main(void)
{
int num = {0};
int n,m=0,o=0,z=0;
int a = {0};
cin >> n;
while (n > 0)
{
num = n % 10;
m++;
n = n / 10;
}
while (o < 1005)
{
z = num;
a++;
o++;
}
for (o = 0; o < 10; o++)
{
if (a != 0)
cout << o << ":" << a << endl;
}
return 0;
}
比如以上的代码 如果我输入134268,就会导致0的次数有999次
就很烦{:5_90:} 我会保持在线的{:5_96:} 其实挺简单的,你用m表示数字的长度。那么可以在得到数字的长度后面再定义num
类似这样
int num = {0};
确实 我解决这个问题是挺简单的 但是这样不会报错吗 就是是位置常量 因为c++ 用new和delete实现动态数组
参考代码:int n;
cin >> n;
int *nums = new int;
// 使用......
// 使用完毕记得delete
delete nums; lhgzbxhz 发表于 2020-11-8 10:18
用new和delete实现动态数组
参考代码:int n;
cin >> n;
对不起 我设置最佳错了 应该设置动态数组的 普通的会报错 lhgzbxhz 发表于 2020-11-8 10:18
用new和delete实现动态数组
参考代码:int n;
cin >> n;
我直接分配对应长度的应该会更加方便吧。 但是这样编译器会显示 未知n 因为编译器是在编译前就确认了普通数组 好像是的吧 哼哈二将! 发表于 2020-11-8 10:18
但是这样不会报错吗 就是是位置常量 因为c++
不会报错的,变长数组很早以前就支持了 哼哈二将! 发表于 2020-11-8 10:23
因为编译器是在编译前就确认了普通数组 好像是的吧
https://i.bmp.ovh/imgs/2020/11/002d83a02b7abd77.png int main(void)
{
int num = { 0 };
int n, m = 0, o = 0, z = 0;
int a = { 0 };//计数数组
cin >> n;
while (n > 0) //将输入拆分,存入num
{
num = n % 10;
m++;
n = n / 10;
}
while (o < 1005)
{
if (num == 0 && num == 0)
{
o++;
break;
}
else
{
z = num;
a++;
o++;
}
}
for (o = 0; o < 10; o++)
{
if (a != 0)
cout << o << ":" << a << endl;
}
return 0;
}
试试这样
测试:
1234444567
1:1
2:1
3:1
4:4
5:1
6:1
7:1 C:\Users\NKQ\Desktop 本帖最后由 jackz007 于 2020-11-8 10:34 编辑
错误在程序逻辑,不在数组容量上。
把这一句
while (o < 1005)
{
z = num;
a++;
o++;
}
改成下面这样
while (o < m)
{
z = num;
a++;
o++;
} 额 怎么发图片的
我的还是会报错 我用的vs2019
显示 不包含常量 n是变量
shooan 发表于 2020-11-8 10:28
这貌似是c99定义的标准,在c++标准下无法运行
为获得最大程度的可移植性,请尽量使用new或malloc jackz007 发表于 2020-11-8 10:32
把这一句
改成下面这样
可以 就是不考虑位数以后的数据 昨非 发表于 2020-11-8 10:30
试试这样
测试:
就怕这种23400000000123的吧
页:
[1]
2