2006年9月全國等級考試三級c語言上機題庫(二十五)

字號:


    ★☆題目25 (回文數(shù)問題)
    下列程序的功能是:尋找并輸出11至999之間的數(shù)m,它滿足m,m2和m3均為回文數(shù)。所謂回文數(shù)是指其各位數(shù)字左右對稱的整數(shù),例如121,676,94249等。滿足上述條件的數(shù)如m=11,m2=121,m3=1331皆為回文數(shù)。請編制函數(shù)int svalue(long m)實現(xiàn)此功能,如果是回文數(shù),則函數(shù)返回1,反之則返回0。最后把結(jié)果輸出到文件out.dat中。
    注意:部分源程序已給出。
    請勿改動主函數(shù)main()的內(nèi)容。
    #include
    int jsValue(long n)
    {int i,strl,half;
    char xy[20];
    ltoa(n,xy,10); /*注意這里不能使用itoa()函數(shù),因為n是long 型的*/
    strl=strlen(xy);
    half=strl/2;
    for(i=0;iif(xy[i]!=xy[--strl]) break;
    if(i>=half) return 1;
    else return 0;
    }
    main()
    {long m;
    FILE *out;
    out=fopen("out.dat","w");
    for(m=11;m<1000;m++)
    { if(jsValue(m)&&jsValue(m*m)&&jsValue(m*m*m))
    { printf("m=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m);
    fprintf(out,"m=%4ld,m*m=%6ld,m*m*m=%8ld \n",m,m*m,m*m*m);
    }
    }
    fclose(out);
    system("pause");
    }
    或者下面的解法:
    int jsValue(long n)
    {long int s=0,k;
    k=n;
    while(k)
    { s=s*10+k%10;
    k/=10;
    }
    if(s==n) return 1;
    if(s!=n) return 0;
    }
    輸出結(jié)果為:
    m= 11,m*m= 121,m*m*m= 1331
    m= 101,m*m= 10201,m*m*m= 1030301
    m= 111,m*m= 12321,m*m*m= 1367631