ปัญหา
ได้รับตัวเลข 1 ตัว หาผลรวมหลักเลข และผลคูณหลักเลข แล้วหาผลต่าง (Product - Sum) เช่น 5362: Sum=16, Product=180 → 180-16=164
วิธีแก้
แยกหลักเลขทีละตัว (mod 10, div 10) บวกและคูณสะสม แล้วคืน Product - Sum
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int subtractProductAndSum(int n) {
int prod = 1;
int sum = 0;
for (int t = n; t; t /= 10) {
sum += t % 10;
prod *= t % 10;
}
return prod - sum;
}
};
int main() {
Solution ob;
cout << ob.subtractProductAndSum(5362);
}
อินพุต
5362
เอาต์พุต
164
คำอธิบาย
ลูป while (t) หรือ for (t=n; t; t/=10) แยกหลักเลขจากขวาไปซ้าย t%10 ได้หลักหน่วย t/=10 ตัดหลักหน่วยออก ความซับซ้อน O(log n)