ปัญหา
สมมติว่าเรามีจำนวนเต็ม n เราต้องคืนค่าจำนวนเต็มลำดับที่ n หลังจากดำเนินการดังนี้: เริ่มจากจำนวนเต็ม 1 นำจำนวนเต็มที่มีเลข 9 ออก เช่น 9, 19, 29... ตอนนี้เราจะได้ลำดับจำนวนเต็มใหม่ เช่น 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, ... จำไว้ว่า 1 จะเป็นจำนวนเต็มตัวแรก
เช่น ถ้าผนวกเข้าเป็น 9 ผลลัพธ์จะเป็น 10
วิธีแก้ปัญหา
- ret := 0
- s := 1
- while n ไม่เท่ากับ 0 ทำ:
- ret := ret + (n mod 9) * s
- n := n / 9
- s := s * 10
- s := s * 10
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
int newInteger(int n) {
int ret = 0;
lli s = 1;
while (n) {
ret += (n % 9) * s;
n /= 9;
s *= 10;
}
return ret;
}
};
int main(){
Solution ob;
cout << (ob.newInteger(120));
}
อินพุต
120
เอาต์พุต
143