标题:自守数,编到某一句的时候突然崩溃
只看楼主
q1826050194
Rank: 2
等 级:论坛游民
帖 子:67
专家分:19
注 册:2011-3-7
结帖率:77.78%
已结贴  问题点数:20 回复次数:10 
自守数,编到某一句的时候突然崩溃
求自守数
#include<stdio.h>
int main()
{
    int a,number,num,kk,total,ll,k;
    printf("请输入数字:");
    scanf("%d",&number);
    for(a=1;a<=number;a++)
    {
        for(num=a,k=1;(num/=10)>0;k*=10);
        
        kk=k*10;
        total=0;
        ll=10;
        while(k>0)
        {
            total=(total+((a%(k*10))*(a%ll-a%(a/10)))%kk);//每次运行到这里的时候就会崩溃,求解决
            k/=10;
            ll*=10;
        }
        if(a==total)
        printf("%d ",a);
    }
    return 0;
}
搜索更多相关主题的帖子: 数字 include number return 
2011-08-25 14:55
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
得分:0 
错误是Integer Divide by Zero
你那句  a%(a/10)的时候
a 一开始不是1吗
a/10就为 0 了
就不能 a % 0 了
2011-08-25 15:09
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
得分:0 
恩恩,的确是哪里发生错啦,你改过另外一个符号就知道了
2011-08-25 15:18
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
得分:20 
total=(total+((a%(k*10))*(a%ll-a%(a/10)))%kk);//每次运行到这里的时候就会崩溃,求解决
由于for(a=1;a<=number;a++)
这里给a赋值时,存在a<10的情况
所以在进行(a%ll-a%(a/10)))%kk计算时会出现对0求余数的情况,故程序就挂了;
a<10   a/10==0;
a%(a/10)相当于a%0
如果只是写表达式,比如 3%0,程序是不会挂的,但要是使用其值的话
比如 a=3%0;则程序挂掉,楼主可以自己试试!
希望对你有帮助
2011-08-25 15:59
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
得分:0 
我想到了一个简单的算法求自首数
程序代码:
# include <stdio.h>

int main (void)
{
    int n;

    printf("请输入一个数\n");
    scanf("%d",&n);

    if (0 == (n*n - n) % 10)
        printf("这个数是自首数\n");
    else
        printf("这个数不是自首数\n");

    return 0;
}



学C的秘诀=每天都来泡论坛
2011-08-25 16:12
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
得分:0 
如果是楼主崩溃了~ 我会更加感兴趣
2011-08-25 19:03
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:0 
回复 5楼 edwardflee
自守数虽然符合这个规律,但是86不是自守数,这个算法的答案是自守数。不正确哦
2011-08-25 19:45
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:0 
程序代码:
int f(char *a,char *b)
{if(strcmp(a+strlen(a)-strlen(b),b)==0)
return 1;
return 0;
}
main()
{
long int i;
for(i=1;i<10000;i++)
{char a[100],b[100];
sprintf(b,"%d",i);
sprintf(a,"%d",i*i);
if(f(a,b))
printf("%d*%d=%d\n",i,i,i*i);
}
getch();}
2011-08-25 19:45
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
得分:0 
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int startnum,endnum;
    int i,j;
    int flg = 0;
    printf("please input start number:");
    scanf("%d",&startnum); 
    printf("please input end number:");
    scanf("%d",&endnum);     
    for(i = startnum;i <= endnum;i ++)
    {
        j = 1;
        while(1)
        {
            if((i * i) / pow(10,j) == 0) break;
            j ++;
        }
        while(j)
        {
            if((i * i) % (int)pow(10,j) == i)
            {
                printf("%d ",i);
                flg = 1;
                break;
            }
            j --;
        }
    }
    if(flg == 0) printf("There is no automorphic number\n");
    else printf("\n");
    return 0;
}

天道酬勤!
2011-08-25 20:31
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
得分:0 
回复 7楼 hjywyj
是哦,想简单了呢,修改了一下,麻烦再帮我看看?
程序代码:
# include <stdio.h>

int main (void)
{
    int n;
    int i;
    int j=1;

    printf("请输入一个数\n");
    scanf("%d",&n);
   
    i = n;
    while (i>0)
    {
        i /= 10;
        j *= 10;
    }
   
    if (0 == (n*n - n) % j)
        printf("这个数是自首数\n");
    else
        printf("这个数不是自首数\n");
   
    return 0;
}


学C的秘诀=每天都来泡论坛
2011-08-26 11:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-348392-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060199 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved