c语言 回文数 完整程序,【C语言程序设计】C语言回文数怎么求

【C语言程序设计】C语言回文数怎么求

问题描述

打印所有不超过n(取n256)的其平方具有对称性质的数(也称回文数)。

问题分析

对于要判定的数n计算出其平方后(存于a),按照“回文数”的定义要将最高位与最低位、次高位与次低位……进行比较,若彼此相等则为回文数。此算法需要知道平方数的位数,再一一将每一位分解、比较,此方法对于位数已知且位数不是太多的数来说比较适用。

此问题可借助数组来解决。将平方后的(a的)每一位进行分解,按从低位到高位的顺序依次暂存到数组中,再将数组中的元素按照下标从大到小的顺序重新将其组合成一个数众(如n=15,则a=225且k=522),若k等于n×n则可判定n为回文数。

算法设计

从低位到高位将某一整数拆分。对于一个整数(设变量名为a)无论其位数多少,若欲将最低位拆分,只需对10进行求模运算a%10,拆分次低位首先要想办法将原来的次低位作为最低位来处理;

用原数对10求商可得到由除最低位之外的数形成的新数,且新数的最低位是原数的次低位,根据拆分最低位的方法将次低位求出a/10、a%10,对于其他位上的数算法相同。

利用这个方法要解决的一个问题就是,什么情况下才算把所有数都拆分完

当拆分到只剩原数最高位时(即新数为个位数时),再对10求商的话,得到的结果肯定为0,可以通过这个条件判断是否拆分完毕。

根据题意,应将每次拆分出来的数据存储到数组中,原数的最低位存到下标为0的位置,次低位存到下标为1的位置……依次类推。

————————

程序段如下:

for (i=0; a!=0; i++)

{

m[i] = a % 10;

a /= 10;

}

将数组中元素重新组合成一新数。

拆分时变量a的最高位仍然存储在数组中下标最大的位置,根据“回文数”定义,新数中数据的顺序与a中数据的顺序相反;

所以我们按照下标从大到小的顺序分别取出数组中的元素组成新数k,由几个数字组成一个新数时只需用每一个数字乘以所在位置对应的权值然后相加即可;

在编程过程中应该有一个变量t来存储每一位对应的权值,个位权值为1,十位权值为10,百位权值为100……,所以可以利用循环,每循环一次t的值就扩大10倍。

对应程序段如下:

for( ; i0; i--)

{

k += m[i-l] * t;

t *= 10;

}

————————

下面是完整的代码:

#includestdio.h

int main()

{

int m[16], n, i, t, count=0;

long unsigned a, k;

printf("No. number it's square(palindrome)\n");

for( n=1; n256; n++ ) /*穷举n的取值范围*/

{

k=0; t=1; a=n*n; /*计算n的平方*/

for( i=0; a!=0; i++ ) /*从低到高分解数a的每一位存于数组m[1]~m[16]*/

{

m[i] = a % 10;

a /= 10;

}

for(; i0; i--)

{

k += m[i-1] * t; /*t记录某一位置对应的权值 */

t *= 10;

}

if(k == n*n)

printf("%2d%10d%10d\n", ++count, n, n*n);

}

return 0;

}

运行结果:

No. number it's square(palindrome)

1 1 1

2 2 4

3 3 9

4 11 121

5 22 484

6 26 676

7 101 10201

8 111 12321

9 121 14641

10 202 40804

11 212 44944

最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

【值得关注】我的 C/C++编程学习交流俱乐部【点击进入】

问题答疑,学习交流,技术探讨,还有超多编程资源大全,零基础的视频也超棒~

【C语言程序设计】C语言回文数怎么求 相关文章

力扣1423. 可获得的最大点数-C语言

题目 题目链接 几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoint

c语言中求课程总分、平均分。学生总分及平均分

1、 #include stdio.hint main(void){ int i, j; int a[6][2]; puts("please input the elements of the 6 * 2 matrix."); for (i = 0; i 6; i++) { for (j = 0; j 2; j++ ) { printf("a[%d][%d] = ", i, j ); scanf("%d", a[i][j]); } } int majorsum[2] =

4.5 类型转换

4.5 类型转换 由于 Java 是强类型语言,所以要进行有些运算的时候,需要用到类型转换 graph LRA(低)....-B(高)C(byte,short,char)--D(int)--E(long)--F(float)--G(double) 运算中,不同类型的数据先转换为同一类型,然后进行运算 强制类型转换(高→低) pub

变量、常量、运算符

变量 java是一种强类型语言,每个变量都必须声明其类型 java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域 每个变量都有类型,类型可以是基本类型,也可以是引用类型 变量名必须是合法的标识符 变量声明是一条完整的语句,因此每一个声

Day04-笔记

1.类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换 运算中,不同类型的数据先转换为同一类型,然后进行运算 强制类型转换 自动类型转换 类型转换 public class Demo05 { public static void main(String[] args) { int i = 128;

4.3 数据类型讲解

4.3 数据类型讲解 数据类型 强类型语言(Java) 要求变量的使用要严格符合规定,所有变量必须先定义后才能使用 安全性高 速度慢 弱类型语言(JavaScript) Java 的数据类型 基本类型(Primitive Type) 数值类型 整数类型 byte:占 1 个字节 short:占 2 个

js高级程序设计第3版(5章:引用类型)

1.Object类型 创建方式:new Object() 、var person={name:''} 访问对象的属性方法:[]访问可以通过变量来访问属性,通常除非使用变量来访问属性,建议使用. 2.Array类型 检测数组的方法:instanceof Array.isArray() 转换方法:alert()中接收字符串参数,会

Shell编程

简介 Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。 Shell 既是一种命令语言,又是一种程序设计语言。 Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。 Shell 编程跟

Electron实用技巧-electron-builder中用户协议(license)的使用及多语言支持

# 1 通常pc软件的安装过程中,会加入用户协议,如: 下面介绍一下使用 electron-builder 打包应用,如何加入license。首先参考官网介绍:windows:nsis,macOS:dmg # 2 官网上关于license配置说明写的不是很详细,下面是我实践总结出的正确的姿势: 最简单

自制编译器 青木峰郎 笔记 Ch2 Cb和Cbc

2.1 Cb语言的概要 删除了以下功能 预处理器 浮点数 KR语法 enum struct的bit field struct和union的赋值 struct和union的返回值 逗号表达式 const volatile auto register import 用import 关键字替代了#include(没有预处理器) import stdio;int main(int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值