求1-10000之间的同构数

2024-05-12 03:32
文章标签 同构 之间 10000

本文主要是介绍求1-10000之间的同构数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“同构数”是指这样的整数:它恰好出现在其平方数的右端。如:376*376=141376。请找出10000以内的全部“同构数”

来自360问答的题目,试着写了写,好歹实现了。

/*总结思路:
1.求出1-10000之间每个数的位数(即这个数是几位数)
2.再求出每个数的平方值,提取出最右端对应位数的数值出来(如369是个三个数,它的平方是136161,用取模%法提取出最右三位数字161)
3.最好对比i与右端数 是否相等,相等即为同构数*/
# include<stdio.h>void main(void)
{
int digit = 0; //记录同构数的位数
int square = 0; //记录平方值
int rightvalue = 0; //平方数的右端的值
int t =0, times =1;//临时变量(循环期间会重置)for(int i=1; i<=10000; i++){
digit = 0 ; //每次循环重置位数 
rightvalue = 0;
times = 1;
t = i;
square = i * i;
while(t){
t/=10;
digit++;
}
while(digit--){
rightvalue += (square%10)*times;
square/=10;
times *= 10;
}
if(i == rightvalue){printf("%d * %d = %d\n", i, i, i*i);
}}
}
/******VC++6.0中执行结果如下*********
1 * 1 = 1
5 * 5 = 25
6 * 6 = 36
25 * 25 = 625
76 * 76 = 5776
376 * 376 = 141376
625 * 625 = 390625
9376 * 9376 = 87909376
************************************/

新增算法:(执行结果同上)

/*	这两天还在想这个问题,感觉多重if判定比上面多重循环要更优一点。不过前面的算法太复杂,但更大的数值判定不须再增加条件去,改i的范围就行而这个数值每多一位数要加一重判定,好处是简单易懂。	*/
/*
思路:1.先明确i数值的位数,再用i平方的值(i*i)取余2.对i的平方值取余的位数等同i这个数值的位数(如i=123为3位数,123*123=15129,对15129取三个余数,即15129%1000 = 129)3.对比i == (i*i)%10 (位数每增加1位,%取余位相应增加)
*/
# include<stdio.h>void main(void)
{for(int i = 1; i<=10000; i++){if(i>=1 && i<=9){	//i是1位数时if(i == (i*i)%10)//(注意*的运算优先级大于%,后面都不加括号了)printf("%d * %d = %d\n", i, i, i*i);}else if(i>=10 && i<=99){	//i是2位数时if(i == i*i%100)	printf("%d * %d = %d\n", i, i, i*i);}else if(i>=100 && i<=999){	//i是3位数时if(i == i*i%1000)printf("%d * %d = %d\n", i, i, i*i);}else if(i>=1000 && i<=9999){	//i是4位数时if(i == i*i%10000)printf("%d * %d = %d\n", i, i, i*i);}/*	if(i==10000){	//当i为10000时,明显不会是同构数,这里不作判定}*/	}
}



这篇关于求1-10000之间的同构数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981482

相关文章

ccp之间是不可以直接进行+,-的,要用ccpSub和ccpAdd。

1.  http://www.cnblogs.com/buaashine/archive/2012/11/12/2765691.html  上面有好多的关于数学的方面的知识,cocos2dx可能会用到的 2.学到了   根据tilemap坐标得到层上物体的id int oneTiled=flagLayer->tileGIDt(tilePos);

1_CString char* string之间的关系

CString转char*,string string转char*,CString char* 转CString,string 一、CString转char*,string //字串转换测试 CString CString1; std::string string1; CHAR* char1=NULL; //1string1=CString1.GetBuffer();CStri

【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

操作系统管理物理内存以及与外设磁盘硬件进行数据的交换 操作系统如何管理物理内存呢? 其实操作系统内核先对内存先描述再组织的!操作系统管理内存的基本单位是4KB,操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct page结构体,该结构体存储着这4KB内存块的属性信息,通过管理struct page来对内存进行管理,page结构体的大小比较小,OS通常将它们组成一个

无法解决 equal to 运算中 Chinese_PRC_90_CI_AS 和 Chinese_PRC_BIN 之间的排序规则冲突

这是因为数据库 oa 和 hh 的编码格式不一样导致的 select  groupname as oper_id,name as oper_name from security_users where name collate Chinese_PRC_CI_AS not in (select oper_name from PDA_UsersAndPWD )

vue组件之间传值方式 vue父子组件传值传参方法

https://www.cnblogs.com/lingdu87/p/9147555.html vue组件之间传值方式解析一.父组件传到子组件 1.父组件parent代码如下: <template><div class="parent"><h2>{{ msg }}</h2><son psMsg="父传子的内容:叫爸爸"></son> <!-- 子组件绑定psMsg变量--></div></t

抽象类和接口之间的关系

1。类可以实现多个接口而只能继承一个超类。 2。抽象类可以有非抽象方法而接口的方法只能都是抽象的。 3。抽象类可以定义和使用变量而接口则不可以。 4。抽象类中的方法可以有各种不同的修饰符,而接口中的方法默认都是public,不允许字面定修饰符。 一个接口中的成员函数可以在不同的类中安装,而它的成员函数可以有很多种的实现方法,但是抽象类却不能象这样,它必须是由子类来继承,然后由子类来实现它的

iOS 视图之间的各种传值方式

属性传值 将A页面所拥有的信息通过属性传递到B页面使用 B页面定义了一个naviTitle属性,在A页面中直接通过属性赋值将A页面中的值传到B页面。 A页面DetailViewController.h文件 #import <UIKit/UIKit.h> #import "DetailViewController.h" @interface RootViewCon

Selenium Webdriver处理iFrame之间的切换问题

原文转自:https://blog.csdn.net/dongtianlaile/article/details/9854263 对于使用的iFrame技术的website, 使用xPath无法直接定位到元素,需要先切换到相应的frame再进行定位: [java]  view plain copy WebElement frame=driver.findElement(By.

「BioNano系列」如何进行cmap之间的比对

BioNano以cmap格式存放光学图谱,为了评估基因组的组装质量或者了解光学图谱中冗余情况(高杂合基因组组装结果偏大),我们就需要进行cmap之间的比较。 CMAP间比对 Solve套件提供了runCharacterize.py脚本封装了RefAligner,用于进行CMAP之间的比对。 python2.7 runCharacterize.py \-t RefAligner的二进制文件路径

今天遇到的3到智力面试题(给工人分金条,小鸟来回在2火车之间飞行的距离,精确称水问题)

智力题1:你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费? 答:把金条2次弄断的方式是第一次1,6分,,然后把剩余的6用2,4分,即弄断2次为1段、2段、4段 第一天给1段, 第二天让工人把1段归还给2段, 第三天给1段, 第四天归还1段和2段,给4段。 第五天给1段, 第六天给2