京东笔试第2道神奇数(气吐血,就差两秒就改完)
//解题思路: //用子函数判断是否为神奇数,读取数字的每一位,存入vector; //求取vector中每两相邻数字的差值(绝对值),存进vector; //重复上步骤,直至只剩两个差值 //当两个差值相同时,这个数字为神奇数,否则不是神奇数 //自己运行 1 50 案例答案是对的,但是菜鸡的我加了else语句,始终编译不过 //请大神们指教,以下代码是否可行
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
bool isM(long n) // 判断是否为神奇数
{
vector<long> v;
if (n > 10) //1 到10都不是神奇数
{
while (n != 0) //存取每位数字
{
v.push_back(n % 10);
n /= 10;
}
int len = v.size();
while (len > 2)
{
for (int i = 0; i < len-1; i++)
{
v[i] = abs(v[i + 1] - v[i]);
}
len--;
}
if (len == 2)
{
if (v[0] == v[1])
return true;
else
return false;
}
}
//else //这里的else没去掉,死活编译不过
return false;
}
int main()
{
long count = 0;
long l, r;
while (cin >> l >> r)
{
for (int j = l; j <= r; j++)
{
if (isM(j)) count++;
}
cout << count << endl;
}
return 0;
}
#京东##C++工程师#