哼哈二将! 发表于 2020-11-8 09:50:26

我想设置一个数组,长度为输入数字的数位。。。。

我发现我做的很多题 都有这个现象,就是要求数组上限很高,但用不完,用不完的部分会影响输出结果,所以我想怎么让未使用的部分消失,然后满足条件
#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:}

哼哈二将! 发表于 2020-11-8 09:51:00

我会保持在线的{:5_96:}

shooan 发表于 2020-11-8 10:13:47

其实挺简单的,你用m表示数字的长度。那么可以在得到数字的长度后面再定义num
类似这样
int num = {0};

哼哈二将! 发表于 2020-11-8 10:17:20

确实 我解决这个问题是挺简单的

哼哈二将! 发表于 2020-11-8 10:18:04

但是这样不会报错吗 就是是位置常量 因为c++

lhgzbxhz 发表于 2020-11-8 10:18:19

用new和delete实现动态数组
参考代码:int n;
cin >> n;
int *nums = new int;
// 使用......
// 使用完毕记得delete
delete nums;

哼哈二将! 发表于 2020-11-8 10:19:22

lhgzbxhz 发表于 2020-11-8 10:18
用new和delete实现动态数组
参考代码:int n;
cin >> n;


对不起 我设置最佳错了

哼哈二将! 发表于 2020-11-8 10:21:45

应该设置动态数组的 普通的会报错

shooan 发表于 2020-11-8 10:22:00

lhgzbxhz 发表于 2020-11-8 10:18
用new和delete实现动态数组
参考代码:int n;
cin >> n;


我直接分配对应长度的应该会更加方便吧。

哼哈二将! 发表于 2020-11-8 10:23:11

但是这样编译器会显示 未知n

哼哈二将! 发表于 2020-11-8 10:23:52

因为编译器是在编译前就确认了普通数组 好像是的吧

shooan 发表于 2020-11-8 10:25:39

哼哈二将! 发表于 2020-11-8 10:18
但是这样不会报错吗 就是是位置常量 因为c++

不会报错的,变长数组很早以前就支持了

shooan 发表于 2020-11-8 10:28:47

哼哈二将! 发表于 2020-11-8 10:23
因为编译器是在编译前就确认了普通数组 好像是的吧

https://i.bmp.ovh/imgs/2020/11/002d83a02b7abd77.png

昨非 发表于 2020-11-8 10:30:29

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

哼哈二将! 发表于 2020-11-8 10:31:33

C:\Users\NKQ\Desktop

jackz007 发表于 2020-11-8 10:32:17

本帖最后由 jackz007 于 2020-11-8 10:34 编辑

      错误在程序逻辑,不在数组容量上。
      把这一句
    while (o < 1005)
    {
      z = num;
      a++;
      o++;
    }
      改成下面这样
    while (o < m)
    {
      z = num;
      a++;
      o++;
    }

哼哈二将! 发表于 2020-11-8 10:32:27

额 怎么发图片的
我的还是会报错 我用的vs2019
显示 不包含常量 n是变量

lhgzbxhz 发表于 2020-11-8 10:33:43

shooan 发表于 2020-11-8 10:28


这貌似是c99定义的标准,在c++标准下无法运行
为获得最大程度的可移植性,请尽量使用new或malloc

哼哈二将! 发表于 2020-11-8 10:34:41

jackz007 发表于 2020-11-8 10:32
把这一句

      改成下面这样

可以 就是不考虑位数以后的数据

哼哈二将! 发表于 2020-11-8 10:36:20

昨非 发表于 2020-11-8 10:30
试试这样
测试:

就怕这种23400000000123的吧
页: [1] 2
查看完整版本: 我想设置一个数组,长度为输入数字的数位。。。。