鱼C论坛

 找回密码
 立即注册
查看: 2137|回复: 23

[已解决]我想设置一个数组,长度为输入数字的数位。。。。

[复制链接]
发表于 2020-11-8 09:50:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我发现我做的很多题 都有这个现象,就是要求数组上限很高,但用不完,用不完的部分会影响输出结果,所以我想怎么让未使用的部分消失,然后满足条件
#include<iostream>
using namespace std;

int main(void)
{
    int num[1005] = {0};
    int n,m=0,o=0,z=0;
    int a[10] = {0};
    cin >> n;
    while (n > 0)
    {
        num[m] = n % 10;
        m++;
        n = n / 10;
    }
    while (o < 1005)
    {
        z = num[o];
        a[z]++;
        o++;
    }
    for (o = 0; o < 10; o++)
    {
        if (a[o] != 0)
            cout << o << ":" << a[o] << endl;
    }
    return 0;
}
比如以上的代码 如果我输入134268,就会导致0的次数有999次
就很烦
最佳答案
2020-11-8 10:13:47
其实挺简单的,你用m表示数字的长度。那么可以在得到数字的长度后面再定义num
类似这样
int num[m] = {0};
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-8 09:51:00 | 显示全部楼层
我会保持在线的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:13:47 | 显示全部楼层    本楼为最佳答案   
其实挺简单的,你用m表示数字的长度。那么可以在得到数字的长度后面再定义num
类似这样
int num[m] = {0};

评分

参与人数 1荣誉 -1 鱼币 -1 贡献 -1 收起 理由
lhgzbxhz -1 -1 -1 lz要求动态数组啊喂,这样编译器不支持的好.

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 2

使用道具 举报

 楼主| 发表于 2020-11-8 10:17:20 | 显示全部楼层
确实 我解决这个问题是挺简单的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:18:04 | 显示全部楼层
但是这样不会报错吗 就是是位置常量 因为c++
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-8 10:18:19 | 显示全部楼层
用new和delete实现动态数组
参考代码:int n;
cin >> n;
int *nums = new int[n];
// 使用......
// 使用完毕记得delete
delete nums;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-11-8 10:19:22 | 显示全部楼层
lhgzbxhz 发表于 2020-11-8 10:18
用new和delete实现动态数组
参考代码:int n;
cin >> n;

对不起 我设置最佳错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:21:45 | 显示全部楼层
应该设置动态数组的 普通的会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:22:00 | 显示全部楼层
lhgzbxhz 发表于 2020-11-8 10:18
用new和delete实现动态数组
参考代码:int n;
cin >> n;

我直接分配对应长度的应该会更加方便吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:23:11 | 显示全部楼层
但是这样编译器会显示 未知n
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:23:52 | 显示全部楼层
因为编译器是在编译前就确认了普通数组 好像是的吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:25:39 | 显示全部楼层
哼哈二将! 发表于 2020-11-8 10:18
但是这样不会报错吗 就是是位置常量 因为c++

不会报错的,变长数组很早以前就支持了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:28:47 | 显示全部楼层
哼哈二将! 发表于 2020-11-8 10:23
因为编译器是在编译前就确认了普通数组 好像是的吧


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:30:29 | 显示全部楼层
  1. int main(void)
  2. {
  3.         int num[1005] = { 0 };

  4.         int n, m = 0, o = 0, z = 0;
  5.         int a[10] = { 0 };  //计数数组
  6.         cin >> n;
  7.         while (n > 0)   //将输入拆分,存入num
  8.         {
  9.                 num[m] = n % 10;
  10.                 m++;
  11.                 n = n / 10;
  12.         }

  13.         while (o < 1005)
  14.         {
  15.                 if (num[o] == 0 && num[o + 1] == 0)
  16.                 {
  17.                         o++;
  18.                         break;
  19.                 }
  20.                 else
  21.                 {
  22.                         z = num[o];
  23.                         a[z]++;
  24.                         o++;
  25.                 }

  26.         }
  27.         for (o = 0; o < 10; o++)
  28.         {
  29.                 if (a[o] != 0)
  30.                         cout << o << ":" << a[o] << endl;
  31.         }
  32.         return 0;
  33. }
复制代码


试试这样
测试:
  1. 1234444567
  2. 1:1
  3. 2:1
  4. 3:1
  5. 4:4
  6. 5:1
  7. 6:1
  8. 7:1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:31:33 | 显示全部楼层
C:\Users\NKQ\Desktop
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:32:17 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-8 10:34 编辑

      错误在程序逻辑,不在数组容量上。
      把这一句
  1.     while (o < 1005)
  2.     {
  3.         z = num[o];
  4.         a[z]++;
  5.         o++;
  6.     }
复制代码

        改成下面这样
  1.     while (o < m)
  2.     {
  3.         z = num[o];
  4.         a[z]++;
  5.         o++;
  6.     }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:32:27 | 显示全部楼层
额 怎么发图片的
我的还是会报错 我用的vs2019
显示 不包含常量 n是变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-8 10:33:43 | 显示全部楼层

这貌似是c99定义的标准,在c++标准下无法运行
为获得最大程度的可移植性,请尽量使用new或malloc
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-11-8 10:34:41 | 显示全部楼层
jackz007 发表于 2020-11-8 10:32
把这一句

        改成下面这样

可以 就是不考虑位数以后的数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:36:20 | 显示全部楼层
昨非 发表于 2020-11-8 10:30
试试这样
测试:

就怕这种23400000000123的吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 16:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表