问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言程序设计--对称数

发布网友 发布时间:2022-05-23 07:50

我来回答

5个回答

热心网友 时间:2023-10-17 04:11

1、首先打开电脑,然后在电脑中找到并打开Dev-c++软件,编写代码的整体框架。

2、然后输入要查找的范围100--999。

3、输入查找范围之后,接下来可以在for之前补充定义三个变量。

4、然后取出这个数的各个位数。

5、接下来开始编写if判断语句,就完成了。

热心网友 时间:2023-10-17 04:12

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char str[10]={0};
int a,b, num,i,j;
gets(str);
num=strlen(str);

a=atoi(str);
if(num%2==0)
{
if(str[num/2-1]<str[num/2])//未考虑str[num/2-1]==str[num/2]的情况,比如2443
str[num/2-1]=str[num/2-1]+1;
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i]; //2443算出来变2442,错误
}
if(str[num/2-1]<str[num/2])
//str[num/2]=str[num/2]+1;
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];
}

}

if(num%2!=0)
{

str[num/2]=str[num/2]+1; //不需要上来就+1,未必有这个必要,
//比如231,应是232,不是242
for(i=0,j=num-1;i<=num/2;i++,j--)
{
str[j]=str[i];

}
}

b=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return 0;

}

===============================================
按照你的算法,我写了个实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char str[10]={0};
int a,b, num,i,j;
int index;
do{
gets(str);
num=strlen(str); //如果直接输入回车,str是空字符串,下面的计算无法进行
}while(num==0);

a=atoi(str);
index=num/2-1;

/*找出离数字“中心”最近的第一个不对称的位置*/
while(index>=0 && str[index]==str[num-index-1])
{
index--;
}
if(index>=0)
{
if(str[index]<str[num-index-1])
{
int index2=num/2;
/*如果是9,不能再累加了,必须往高位找*/
while(str[index2]=='9')
{
index2--;
}
/*由于str[index]<str[num-index-1]<='9'
* 所以index2肯定能找到,不会出现index2<0的情形
*/
str[index2]=str[index2]+1;
str[num-index2-1]=str[index2];

/*高位累加后,中间位置可以清零,数会比较小*/
for(i=index2+1; i<num-index2-1; ++i){
str[i]='0';
}
}
for(i=0,j=num-1; i<=index; i++,j--)
{
str[j]=str[i];
}
}

b=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return 0;
}

热心网友 时间:2023-10-17 04:12

你的计算里有许多 num/2 ,可以在前面 用 int n5; n5 = num/2; 只算一次,程序里的 num/2 改写为 n5。这能省很多时间。
你的计算原理,我没能看懂,所以没给你改。

有个简单的/笨的方法,就是原数加1,一个一个查找对称数,时间不知道是否满足要求:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[10]={0}, s2[10];
int num,n,n5,i;
_int64 aa,bb,cc;

gets(str);
num = strlen(str);
sscanf(str,"%I64d", &aa);
if (aa < 11){
bb = 11;
printf("%d,%d,%d\n",aa,bb,bb-aa);
return 0;
}
bb = aa;
while (1){
Lab:
bb = bb+1;
sprintf(s2,"%I64d", bb);
n= strlen(s2);
n5 = n/2;
i=0;
do {
if (s2[i] !=s2[n-i-1]) goto Lab;
i++;
} while( i < n5);
break;
}
printf("%I64d,%I64d,%I64d\n",aa,bb,bb-aa);
return 0;
}
供参考。

热心网友 时间:2023-10-17 04:13

楼上有一个代码找的是大于等于输入的回文数有违题意,而且在从中间判断9的时候位置并不准确,稍加修改后代码如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int f(int n){ //10的n次方
int ans=1;
while(n--) ans*=10;
return ans;
}
int main()
{
char str[10]={0};
int a,b=0, num,i,j;
int index;
do{
gets(str);
num=strlen(str); //如果直接输入回车,str是空字符串,下面的计算无法进行
}while(num==0);
a=atoi(str);
index=num/2-1;
/*找出离数字“中心”最近的第一个不对称的位置*/
while(index>=0 && str[index]==str[num-index-1])
{
index--;
}
if(index>=0) //若输入的不是回文数
{
if(str[index]<str[num-index-1])
{
int index2=num/2-1;
index2 += (num%2) ? 1 : 0;
/*如果是9,不能再累加了,必须往高位找*/
while(str[index2]=='9'&&index2>=0)
{
index2--;
}
/*由于str[index]<str[num-index-1]<='9'
* 所以index2肯定能找到,不会出现index2<0的情形
*/
str[index2]=str[index2]+1;
str[num-index2-1]=str[index2];
/*高位累加后,中间位置可以清零,数会比较小*/
for(i=index2+1; i<num-index2-1; ++i){
str[i]='0';
}
}
for(i=0,j=num-1; i<=index; i++,j--)
{
str[j]=str[i];
}
}
else { //若输入的数就是回文数,参照上边打的
int index2=num/2-1;
index2 += (num%2) ? 1 : 0;
while(str[index2]=='9'&&index2>=0) index2--;
if(index2>=0){
str[index2]=str[index2]+1;
str[num-index2-1]=str[index2];
}
for(i=index2+1; i<num-index2-1; ++i){
str[i]='0';
}
if(index2<0){ //若输入全是9
b=f(num)+1;
}
}
b+=atoi(str);
printf("%d,%d,%d\n",a,b,b-a);
return 0;
}

热心网友 时间:2023-10-17 04:13

unsigned int c;
unsigned int b;
unsigned int temp,temp1;

scanf("%d",&c);
temp1 = c;
while(temp1)
{
temp = temp1%10;
temp1 /= 10;
b *= 10;
b += temp;
}

if(c == b)
{
printf("\r\n Yes");
}
else
{
printf("\r\n No");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
枸杞子如何吃养肾呢? 淘宝商家如何报名多件多折玩法?玩法说明 淘宝怎么设置满减优惠券活动?有什么技巧? 淘宝满减活动是商家支付吗?淘宝如何设置满减活动? 淘宝满减算的是原价还是打折价?如何设置满减活动? 家和万事兴里的宋香怀的是谁的孩子 你好:HP380g6加3T硬盘, p410i阵列卡识别硬盘仅为 0GB,确认加入阵列出错... ...G6服务器开机时出现黑底白字的Boot failed 提示界面,寻求高手指教... ...提示slot 0 HP Smart Arry P4101 controller ...ML150G6 的服务器,开机时报slot 4 hp smart array p410 controller是... 谁会做糖葫芦,怎么熬糖 老人机能不能把锁屏给去了 怎样恢复曾经加过的好友 月季花剪来能种活吗 刚剪的月季枝,还带花苞的,应该怎么扦插 求教剪下的月季枝条扦插方法 月季花剪的枝插的活吗?怎么插? 如何挑选擀面杖 小学生跳绳标准 15厘米,10厘米,80厘米,33厘米,小擀面杖应选择多少厘米? 求女孩名字,姓杨,虎年3月份生,谢谢! 怎样吧普通开关改成双控开关 商业车险费率浮动系数是不是每家保险公司都一样 成都 换驾照 成都驾照毁坏换证要带什么 成都处理更换驾照需要什么手续 中国大地财产保险股份有限公司宁波分公司怎么样? 我的世界永恒服务器关闭了吗 斗罗大陆h5永恒状态什么意思? oppo手机打开永恒模式 为什么显示正在冷却中 c++ 对称数的求法 七的对称数是多少 转动配分函数力的对称数是怎么得到的 比方说,同核双原子分子是2,异的就是1 咋算的 双色球数字对称轴线数字怎么算出来 求简单的计算对称点的方法 数学对称等式 对称行列式的计算技巧 0-9,选四个数,哪几个最常用? 数字中有几个对称数 四位数 aaaa baaa aaab也算 关于函数对称都有哪些公式吗? 点对称公式 Excel中函数对称怎么统计次数? 在硬盘录象机里网络设置中。TCP,UDP,HTTP的端口号设置什么数字好,像远程访问的 硬盘录像机的端口号是怎么样查 怎样知道家里DVR的端口号是多少 海康威视硬盘录像机端口号连不上电脑怎么办 请问科达硬盘录像机的控制端口是多少? 海康硬盘录像机设置远程端口号是多少 造形一发后面包,冷冻格一晩在二次醒,在烘烤可以吗? &lt;计算机科学&gt;被EI收录吗