鱼C论坛

 找回密码
 立即注册
查看: 1822|回复: 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};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-8 09:51:00 | 显示全部楼层
我会保持在线的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 2

使用道具 举报

 楼主| 发表于 2020-11-8 10:17:20 | 显示全部楼层
确实 我解决这个问题是挺简单的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:18:04 | 显示全部楼层
但是这样不会报错吗 就是是位置常量 因为c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

使用道具 举报

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

对不起 我设置最佳错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:21:45 | 显示全部楼层
应该设置动态数组的 普通的会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我直接分配对应长度的应该会更加方便吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:23:11 | 显示全部楼层
但是这样编译器会显示 未知n
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:23:52 | 显示全部楼层
因为编译器是在编译前就确认了普通数组 好像是的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不会报错的,变长数组很早以前就支持了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-8 10:30:29 | 显示全部楼层
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
        {
                num[m] = n % 10;
                m++;
                n = n / 10;
        }

        while (o < 1005)
        {
                if (num[o] == 0 && num[o + 1] == 0)
                {
                        o++;
                        break;
                }
                else
                {
                        z = num[o];
                        a[z]++;
                        o++;
                }

        }
        for (o = 0; o < 10; o++)
        {
                if (a[o] != 0)
                        cout << o << ":" << a[o] << endl;
        }
        return 0;
}

试试这样
测试:
1234444567
1:1
2:1
3:1
4:4
5:1
6:1
7:1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:31:33 | 显示全部楼层
C:\Users\NKQ\Desktop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

      错误在程序逻辑,不在数组容量上。
      把这一句
    while (o < 1005)
    {
        z = num[o];
        a[z]++;
        o++;
    }
        改成下面这样
    while (o < m)
    {
        z = num[o];
        a[z]++;
        o++;
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-8 10:32:27 | 显示全部楼层
额 怎么发图片的
我的还是会报错 我用的vs2019
显示 不包含常量 n是变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

这貌似是c99定义的标准,在c++标准下无法运行
为获得最大程度的可移植性,请尽量使用new或malloc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

        改成下面这样

可以 就是不考虑位数以后的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就怕这种23400000000123的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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