题目
题意:给定一个整数
n
n
n,求有多少对整数
a
,
b
a,b
a,b使得
a
+
b
=
n
a+b=n
a+b=n,这里的加法为隔两位进位加法。
把9和6加起来等于15,把1带到左边的两列,即到“0 9”列;
将3和7相加,得到10,并将1带到左边的两列,即到"2 2"列;
将1、0和9相加为10,并将1带到左侧的两列,即到加号上方的列;
添加1、2和2,使其成为5;
加1等于1。
思路:观察发现,加法其实是分奇数位和偶数位。奇数位进位到奇数位,偶数位进位到偶数位。我们将数 n n n按奇偶拆分为两个数 x , y x,y x,y,则答案为 x ∗ y − 2 x*y-2 x∗y−2,详见代码。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int getOdd(int n) {
int x = 0, h = 1;
while (n) {
x += (n % 10) * h;
n /= 100;
h *= 10;
}
return x;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
scanf("%d", &n);
ll x = getOdd(n) + 1;
ll y = getOdd(n / 10) + 1;
// printf("x %lld y %lld\n", x, y);
printf("%lld\n", x * y - 2);
}
}