1583 Digit Generator
簡易翻譯和條件:
題目就是要你找到一個數字a,可以讓某個小於數字a的一個數字i的每一位數與i本身相加之後相等就可以了!
a = i + i的個位數 + i 的十位數 + …..
這題不難但是要注意觀察變化
主要就是不要讓測資超過時間就OK了!
我會利用 inline 是因為這樣速度會比較快。
因為我寫 code 的習慣會把雜亂的部分放到外面當作 function 所以我會使用 inline function
通常這題大家都會直接從 1 到 a 每個數字都算一次,但是這樣的話會超時
其實注意一下就會發現 digit generator 出現的位置並不會離 數字a 本身太遠,所以我就看有幾位數就從 a – digit*10 的地方開始找
(因為有三位數到時候再算總和時就會有 3 個變數會影響到總和阿~
如果有任何問題或是你有更好的寫法歡迎再下面留言討論喔!
我們下一題見啦!
程式碼:
#include iostream using namespace std; inline int digits(int t){ int times = 0; while(t!=0){ t/=10; times++; } return times; } inline int k(int a) { int digit = digits(a); for(int i=(a-digit*10); i<=a; i++) { int sum = i; int t = i; while(t!=0){ sum += t%10; t/=10; } if(sum == a) return i; } return 0; } int main() { int n = 0; cin >> n; while(n--){ int a; cin >> a; cout << k(a) << endl; } return 0; }
