论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C趣味程序(二)(13)

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:44:28



2.8 同构数
   正整数n若是它平方数的尾部,则称n为同构数。例如,6是其平方数36的尾部,76是其平方数5776的尾部,6与76都是同构数。
   试求指定位数的同构数序列。
1、算法分析:
   对指定范围内的每一个整数a,求出其平方,判定a是否是其平方的尾部,通常有以下方法:
   通过字符串子串比较找出同构数。
   为了求更高位数的同构数,可应用同构数的以下性质:一个m位同构数的尾部m-1位数也是一个同构数。道理很简单,a是一个m位数,a的平方数尾部的m-1位仅由a尾部的m-1位决定而与a的最高位无关。
   易知一个同构数有三个:1,5,6,则二位同构数的个位数字只可能是1,5,6这三个数字。
   根据这一思路,我们可应用递推求出多位同构数串。

2.求指定区间内的同构数
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *right(char *ms,int len);        /*截取一个字符串尾部长为len个字符的子串*/
void main()
{
   long a;
   int len;
   char as[10];
   char ms[20];
   printf("求[1,10000]中的同构数:\n");
   for(a=1;a<=10000;a++)
   {
      ultoa(a,as,10);       /*数a转换为字符串,存入as*/
      len=strlen(as);
      ultoa(a*a,ms,10);
      if(strcmp(as,right(ms,len))==0)       /*比较字符串as与ms长为len的子串是否相等*/
         printf("%s 其平方为 %s\n",as,ms);  /*相等就是同构数,输出结果*/
   }
}
char *right(char *ms,int len)         /*截取字符串尾部长为len子串的函数*/
{
   int i,j;
   for(i=0;i<(signed)strlen(ms);ms++);
   for(j=0;j<len;j++,ms--);   
     return ms;

}
     
程序运行结果如下:



--------------------------------------------------------------------------

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程