Re: [問題] 大數如何遞減?

看板C_and_CPP作者 (一杯貓)時間13年前 (2013/01/22 19:45), 編輯推噓2(208)
留言10則, 2人參與, 最新討論串3/3 (看更多)
前一篇, 再加上stimim的推文, 數學分析解釋的差不多了; 如果input給大數是用十進位的方式, 那這個題目基本上可以根本不用管大數, 因為可以輕而易舉分別拿到十位數和個位數. //------ #include <cassert> #include <iostream> #include <string> int last_part[][10] = { {0, 1, 5, 12, 18, 23, 29, 32, 38, 47}, {0, 1, 7, 10, 16, 21, 27, 34, 38, 47} }; int func ( int tens_digit, int units_digit ) { int s = tens_digit * 47; return ( s + last_part[ tens_digit & 1 ][ units_digit ] ) % 10; } int main () { std::string num; size_t n_input, i = 0; for ( std::cin >> n_input; i < n_input; ++i ) { std::cin >> num; int t = 0, u; // tens_digit, units_digit std::string::reverse_iterator rit=num.rbegin(); u = (*rit) - '0'; rit ++; if ( rit != num.rend() ) { t = (*rit) - '0'; } assert ( u >= 0 && u <= 9 && t >= 0 && t <= 9 ); std::cout << func ( t, u ) << std::endl; } return 0; } //------ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.142.18

01/22 19:48, , 1F
讚!有看有推!
01/22 19:48, 1F

01/22 19:51, , 2F
疑!這篇好像也略過最麻煩的大數分析?直接先輸入有幾位數?
01/22 19:51, 2F

01/22 19:52, , 3F
不是, 第一個輸入是有幾個大數要測
01/22 19:52, 3F

01/22 19:53, , 4F
01/22 19:53, 4F

01/22 19:54, , 5F
共15個數: 0,1,2...12, 15, 655350
01/22 19:54, 5F

01/22 19:54, , 6F
oh oh , sorry, 我沒去找原題, 謝謝說明 :)
01/22 19:54, 6F

01/22 19:55, , 7F
大數的部份是當成std::string來接的 (std::string num;
01/22 19:55, 7F

01/22 19:55, , 8F
cin >> num;)
01/22 19:55, 8F

01/22 19:56, , 9F
嗯嗯,了解.
01/22 19:56, 9F

01/22 19:57, , 10F
:P
01/22 19:57, 10F
文章代碼(AID): #1G_dlrf0 (C_and_CPP)
文章代碼(AID): #1G_dlrf0 (C_and_CPP)