Re: [問題] 大數如何遞減?
前一篇, 再加上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
01/22 19:54, 5F
推
01/22 19:54, , 6F
01/22 19:54, 6F
→
01/22 19:55, , 7F
01/22 19:55, 7F
→
01/22 19:55, , 8F
01/22 19:55, 8F
→
01/22 19:56, , 9F
01/22 19:56, 9F
→
01/22 19:57, , 10F
01/22 19:57, 10F
討論串 (同標題文章)