C语言每日一练(014)
点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间阅读编程笔记!
题目
对于一个整数X(1 ≤ x、y ≤ 1000),定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如: 如果 X = 123,则rev(X) = 321; 如果 X = 100,则rev(X) = 1.现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?
输入描述:输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。
输出描述:输出rev(rev(x) + rev(y))的值
示例:输入:123 100 输出:223
代码
方法一
寻找整数与各位之间的对应关系。如 123
,首先考虑怎么逆序取出各数,即怎么取出3、2、1,方法如下:
并且整数与其各位数之间还有这样的关系: 321=(3*10+2)*10+1
。由此,可设计出如下的算法函数:
int rev(int n)
{
int m = 0;
while(n!=0)
{
m = 10*m + n%10;
n = n/10;
}
return m;
}
方法二
因为输入的参数的范围为: 1≤x、y≤1000
,所以可以首先依次求出各位数,然后再根据各位数重新组合成翻转后的数。算法函数如下:
int rev(int n)
{
int m;
int n_qian, n_bai, n_shi, n_ge;
int m_qian, m_bai, m_shi, m_ge;
n_qian = n/1000;
n_bai = n%1000/100;
n_shi = n%100/10;
n_ge = n%10;
if(0==n_qian) //n是三位数
{
m_bai = n_ge;
m_shi = n_shi;
m_ge = n_bai;
m = m_bai*100 + m_shi*10 + m_ge*1;
if(0==n_bai) //n是两位数
{
m_shi = n_ge;
m_ge = n_shi;
m = m_shi*10 + m_ge*1;
if(0==n_shi) //n是一位数
{
m_ge = n_ge;
m = m_ge;
}
}
}
else //n是四位数
{
m_qian = n_ge;
m_bai = n_shi;
m_shi = n_bai;
m_ge = n_qian;
m = m_qian*1000 + m_bai*100 + m_shi*10 + m_ge*1;
}
return m;
}
完整代码
/*******************************************************************************************************
** 题 目: 对于一个整数X(1 ≤ x、y ≤ 1000),定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如:
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?
** 输 入: 输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。
** 输 出: 输出rev(rev(x) + rev(y))的值
** 样例输入:123 100
** 样例输出:223
********************************************************************************************************/
#include <stdio.h>
#define Method 1 // 1:通用法 0:特殊法
int rev(int n);
int main(void)
{
int x, y ,m,m1,m2;
scanf("%d %d", &x, &y);
printf("%d\n", rev(rev(x) + rev(y)));
return 0;
}
#if Method // 方法1:通用法
int rev(int n)
{
int m = 0;
while(n!=0)
{
m = 10*m + n%10;
n = n/10;
}
return m;
}
#else // 方法2:特殊法
int rev(int n)
{
int m;
int n_qian, n_bai, n_shi, n_ge;
int m_qian, m_bai, m_shi, m_ge;
n_qian = n/1000;
n_bai = n%1000/100;
n_shi = n%100/10;
n_ge = n%10;
if(0==n_qian) //n是三位数
{
m_bai = n_ge;
m_shi = n_shi;
m_ge = n_bai;
m = m_bai*100 + m_shi*10 + m_ge*1;
if(0==n_bai) //n是两位数
{
m_shi = n_ge;
m_ge = n_shi;
m = m_shi*10 + m_ge*1;
if(0==n_shi) //n是一位数
{
m_ge = n_ge;
m = m_ge;
}
}
}
else //n是四位数
{
m_qian = n_ge;
m_bai = n_shi;
m_shi = n_bai;
m_ge = n_qian;
m = m_qian*1000 + m_bai*100 + m_shi*10 + m_ge*1;
}
return m;
}
#endif
以上两种解法中,方法一具有通用性,方法二具有局限性,即必须知道所输入的数的范围才能做出专门的解决算法。
运行结果
转发、点在看就是对小编最大的支持!
博客网站
zhengnianli.github.io
猜你喜欢
聊天界面输入m获取往期笔记目录