题目描述:
小红拿到了一个正整数,她希望把数位中的奇数和偶数分别抽取出来然后做差,请你求出这个差的绝对值。例如,302938的奇数抽取出来是393,偶数抽取出来是28最终的差的绝对值是365.
输入描述
一个整数n。
1 ≤n ≤ 10^14
输出描述
一个整数,代表最终差的绝对值。
代码示例
#include <stdio.h>
int main()
{
int a, b;
while(scanf("%d %d",&a,&b)!=EOF)//注意while处理多个case
{
//64位输出请用printf("%lld") to
printf("%d\n",a+b);
}
return 0;
}
题目分析
- 数据类型的选择,由于1 ≤n ≤ 10^14,因此选择long long数据类型;
- 输入只有一个n,但需要得到奇数和偶数差值的绝对值,因此奇数和偶数需要以指针的方式传递;
- 建立while循环,通过n%10的方式将数据中的各个位进行剥离;
- 对各个位进行奇偶判断,同时通过一个依次乘以10的变量将奇数和偶数依次保存;
- 每次循环结束后需要对n除以10,以便对数据的下一位进行处理;
- 最后利用绝对值函数abs将奇数和偶数的差值算出并返回。
代码实现:
void fun(long long n,long long* odd,long long*even)
{
*odd = 0;
*even = 0;
int count1 = 1;
int count2 = 1;
while(n>0)
{
int a = n%10;
if(a%2==0)
{
*even += a*count1;
count1*=10;
}
else
{
*odd += a*count2;
count2*=10;
}
n /=10;
}
}
long long fun1(long long odd,long long even)
{
return labs(odd - even);
}
int main()
{
long long n = 0;
scanf("%lld",&n);
long long odd = 0;
long long even = 0;
long long result = 0;
fun(n,&odd,&even);
result = fun1(odd,even);
printf("%lld\n",result);
return 0;
}