c语言回文数猜想
Ⅰ c语言求回文数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
inti,len,flag,cnt=1,num,numrev,addnum;
charstr[20]={0},strRev[20]={0},hui[20]={0};
gets(str);//输入数字以字符串方式接收
num=atoi(str);//转为数字
strcpy(strRev,strrev(str));//将接收的字符串逆序
numrev=atoi(strRev);//转换成逆序的数字
while(1)
{
addnum=num+numrev;//两个数字相加
printf("STEP%d:%d+%d=%d ",cnt,num,numrev,addnum);//输出
itoa(addnum,hui,10);//将相加后的数字转为字符串
len=strlen(hui);//求长度
flag=0;//标识是否是回文
for(i=0;i<len;i++)//判断是否回文
{
if(hui[i]!=hui[len-i-1])
{
flag=1;//如果不是回文继续
break;
}
}
if(!flag)//根据上面标识符判断是否回文
{
printf("%d%d ",cnt,addnum);//是户
break;
}elseif(cnt++>=30)//判断是否大于等于30次
{
printf("0 ");
break;
}
num=addnum;//将和作为下次运算的第一个数字
strcpy(strRev,strrev(itoa(num,str,10)));//根据第一个数逆序出第二个数
numrev=atoi(strRev);//字符串转数字
}
}
Ⅱ C语言怎么判断一个数是否是回文数
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,比如12321。
以下是判断一个数是否为回文数的代码:
Ⅲ c语言如何求回文数
1、首先打开vc6.0,新建一个控制台项目。
Ⅳ c语言回文数
#include<stdio.h>
#include<string.h>
#defineMAX100//预定义数组长度
intreverse(chara[])//判断是否回文,数字也当字符处理
{
intn=strlen(a);
inti;
for(i=0;i<n;i++)
{
if(a[i]!=a[n-i-1])
return0;//从首尾开始比较,有任一不相等,不是回文,返回0
if(i==n-i-1)//全相等,是回文。返回1
return1;
}
}
intmain(){
chara[MAX];
while(scanf("%s",a)!=EOF)//接受输入CTRL+Z结束输入
{
if(reverse(a))
printf("YES ");
else
printf("NO ");
}
return0;
}
Ⅳ c语言求回文数
任取一个十进制整数,用下面的方法可以求出一个回文数:
把这个数字的各个位,颠倒前后位置,形成一个新数,再和原数相加,得到的和,就可能是一个回文数。
如果不是回文数,就再重复上述的步骤,则最终可得到回文数。
Ⅵ C语言中,什么是回文数
回文数"回文数"是一种数字.如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字
就是回文数.
任意某一个数通过以下方式相加也可得到
如:29+92=121 还有 194+491=586,586+685=1271,1271+1721=2992
不过很多数还没有发现此类特征(比如196,下面会讲到)
另外个别平方数是回文数
1的平方=1
11的平方=121
111的平方=12321
1111的平方=1234321
。
。
。
。
依次类推
3×51=153
6×21=126
4307×62=267034
9×7×533=33579
上面这些算式,等号左边是两个(或三个)因数相乘,右边是它们的乘积。如果把每个算式中的“×”和“=”去掉,那么,它们都变成回文数,所以,我们不妨把这些算式叫做“回文算式”。还有一些回文算式,等号两边各有两个因数。请看:
12×42=24×21
34×86=68×43
102×402=204×201
1012×4202=2024×2101
不知你是否注意到,如果分别把上面的回文算式等号两边的因数交换位置,得到的仍是一个回文算式,比如:分别把“12×42=24×21”等号两边的因数交换位置,得到算式是:
42×12=21×24
这仍是一个回文算式。
还有更奇妙的回文算式,请看:
12×231=132×21(积是2772)
12×4032=2304×21(积是48384)
这种回文算式,连乘积都是回文数。
四位的回文数有一个特点,就是它决不会是一个质数。设它为abba,那它等于a*1000+b*100+b*10+a,1001a+101b。能被11整除。
六位的也一样,也能被11整除
还有,人们借助电子计算机发现,在完全平方数、完全立方数中的回文数,其比例要比一般自然数中回文数所占的比例大得多。例如11^2=121,22^2=484,7^3=343,11^3=1331,11^4=14641……都是回文数。
人们迄今未能找到五次方,以及更高次幂的回文数。于是数学家们猜想:不存在nk(k≥5;n、k均是自然数)形式的回文数。
在电子计算器的实践中,还发现了一桩趣事:任何一个自然数与它的倒序数相加,所得的和再与和的倒序数相加,……如此反复进行下去,经过有限次步骤后,最后必定能得到一个回文数。
这也仅仅是个猜想,因为有些数并不“驯服”。比如说196这个数,按照上述变换规则重复了数十万次,仍未得到回文数。但是人们既不能肯定运算下去永远得不到回文数,也不知道需要再运算多少步才能最终得到回文数。
Ⅶ C语言。回文数猜测。下面是问题和程序。看程序哪里有问题。
一个小错误。
nixu函数里
s=s+b*x/a;
改成
s=s+b*(x/a);
比如nixu(121)的话,while(l<i)执行到第2步时,a,b为10,s=1+10*21/10=22,而实际上这时候s应该等于21,原因就是这时候应该取121的十位2,变成20,加到s上,而你先乘10的话,210/10就得到21了,把个位的1也算上了。
Ⅷ [求代码]C语言——回文数猜测-分支循环小综合
#include <stdio.h>
#include<string.h>
#define N 80
int fun(char *str)
{
char a[N],b[N];
int i=0,j=0;
while(*str)
a[i++]=*str++;
a[i]='\0';
while(i>0)
b[j++]=a[--i];
b[j]='\0';
return (strcmp(a,b)==0);
}
这个是回文数的函数,剩下的你可以自己试着写写看
Ⅸ c语言中如何构造回文数
题目要求不是很明确,你的回文数,是单个int,还是int数组,还是字串
以下是数组的
#include<stdio.h>
void fun(int a[ ], int n)
{
int i , t;
for(i=0; i<n/2; i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main( )
{ int b[9]={1, 2, 3, 4, 5, 6, 7, 8, 9}, i;
fun(b, 9);
printf("The data after inverting: \n");
for(i=0; i<9; i++)
printf("%4d", b[i] );
printf("\n");
}
Ⅹ C语言中的回文数的猜想实验报告(详细)
试验内容:
从键盘输入不超过五位整数的N,得其逆序数然后与原数相加,直到所得数为回文数,运算次数为TIME所得回文数为SUM,运算次数少于1000次且所得回文数大于100.,运行并试验。
程序代码:
#include "stdio.h"
void main()
{int a,b,x,y,z,i;
b=0,i=1;
printf("please input a number(1—100000):");
scanf("%d",&a);
x=a;
while(a>0)
{b=a%10+b*10;
a=a/10;}
for(z=x;i<1000;i++)
{y=z+b; /*qiu N yu N de xushu de he*/
b=0;
z=y;
while(y>0)
{b=y%10+b*10;
y=y/10;}
if(z==b&&b>100)
{printf("N=%d.SUM= %d.time=%d\n",x,b,i);break;} }
if(z!=b)
printf("%d is not a reply counts\n",x); /*dang yun xing 1000 ci hou reng bu wei huiwen shu */
printf(“\n*******************************************************\n”);}