请用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;
}
找出123456这六个数的全排列,但是貌似数太大!c语言
答案:3 悬赏:0 手机版
解决时间 2021-03-20 07:42
- 提问者网友:棒棒糖
- 2021-03-19 14:36
最佳答案
- 五星知识达人网友:未来江山和你
- 2021-03-19 16:08
if(n1!=n2&&n2!=n3&&n3!=n4&&n4!=n5&&n5!=n6&&n6!=n1)//六个数都不相同
return 1;这个判断是错误的,举例:121212这个数,在你的逻辑里面会return 1;这显然不符合题意。
造成的结果就是,你table[cur++]的次数超过了1000次,数组溢出了。
return 1;这个判断是错误的,举例:121212这个数,在你的逻辑里面会return 1;这显然不符合题意。
造成的结果就是,你table[cur++]的次数超过了1000次,数组溢出了。
全部回答
- 1楼网友:野味小生
- 2021-03-19 17:07
1. 没必要使用long 型 ,unsigned int即可满足;
2. table 表定义太小,如果不需要存入只统计以下表示更好:
3. if(isnum(tmp)) cur++;
4. 编程最好使用for循环来优化下,养成更好的习惯。
- 2楼网友:像个废品
- 2021-03-19 16:41
1. 没必要使用long 型 ,unsigned int即可满足;
2. table 表定义太小,如果不需要存入只统计以下表示更好:
3. if(isnum(tmp)) cur++;
4. 编程最好使用for循环来优化下,养成更好的习惯。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯