永发信息网

找出123456这六个数的全排列,但是貌似数太大!c语言

答案:3  悬赏:0  手机版
解决时间 2021-03-20 07:42
请用c语言

我做的是找出1,2,3,4,5,6的全排列,然后数太大,于是我就改成long型,但是还是运行不了,到底为什么...程序如下
#include <stdio.h>
#include <stdlib.h>
isnum(long num)
{
int n1,n2,n3,n4,n5,n6;
n1=num/100000;//取第一位数
n2=(num/10000)%10;
n3=(num/1000)%10;
n4=(num/100)%10;
n5=(num/10)%10;
n6=num%10;
if(n1&&n2&&n3&&n4&&n5&&n6)//6个数都非0
{
if(n1!=n2&&n2!=n3&&n3!=n4&&n4!=n5&&n5!=n6&&n6!=n1)//六个数都不相同
return 1;
else
return 0;
}
else
return 0;
}
int main()
{
long table[1000]={0},tmp=100000,cur=0;
while(tmp++<=654321)
{
if(isnum(tmp))
table[cur++]=tmp;
}
printf("%d\n",cur);

system("pause");
return 0;
}
最佳答案
if(n1!=n2&&n2!=n3&&n3!=n4&&n4!=n5&&n5!=n6&&n6!=n1)//六个数都不相同
return 1;这个判断是错误的,举例:121212这个数,在你的逻辑里面会return 1;这显然不符合题意。
造成的结果就是,你table[cur++]的次数超过了1000次,数组溢出了。
全部回答
1. 没必要使用long 型 ,unsigned int即可满足; 2. table 表定义太小,如果不需要存入只统计以下表示更好: 3. if(isnum(tmp)) cur++; 4. 编程最好使用for循环来优化下,养成更好的习惯。
1. 没必要使用long 型 ,unsigned int即可满足; 2. table 表定义太小,如果不需要存入只统计以下表示更好: 3. if(isnum(tmp)) cur++; 4. 编程最好使用for循环来优化下,养成更好的习惯。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
白户征信查的多能贷款吗
河北海滨建工集团黄骅瑞达物资有限公司地址在
磨砂牛皮有什么缺点
什么是外包尺寸
缺乏张力是什么意思
已知f(x+1)=x²-3x+2,求f(x)
今天姥姥去野地里拾花生,捡回来一个小金铃。
孕检血清报告单怎么看
1+2+3+...+31+32+33=17*33 的规律是什么?
梦见我站在很高的地方,感觉很怕
合心综合超市在什么地方啊,我要过去处理事情
飞屋环游记里有哪些好词好句好段?
单选题与100E正好相对的经线是A.900WB.1700EC
如何在solaris10中添加新分区
我想让我妈领我出去溜达,该怎么说
推荐资讯
所谓的“本硕连读2+2“好不好
休息繁体字怎么写
贝婴美孕婴童生活馆房山店地址在哪,我要去那
两个连接主路由的AP副路由网段可以一样吗
鸡冠洞门票多少钱一张
高台县松木台子距离嘉峪关多少公里?
ua9205n每个档位都有报警声
最好看的松树怎么画
为什么变形金刚2开始要拿中国上海作背景?
淘宝手机端海报怎么做
伐木是不允许的,猜一字
曲轴的研磨等级定义
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?