📄 toj_2804.cpp
字号:
/*InputThe input will contain multiple test cases. Each test case contains a single line with a single integer n, the number of vertices of the polygon. (3 ≤ n ≤ 10^1000)The input will be terminated by the end of file.OutputFor each corresponding n, output a single line with the number of guards needed( n / 3 )Sample Input510099999999999999999999Sample Output13333333333333333333333Problem Setter: nuanranSource: TJU Programming Contest 2007 Preliminary*/#include<cstdio>#include<cstring>#define MAXLEN 1010void scanfNum( char num[] , int & len , char& first , bool& flag ){ int i; char in; bool flagIn; num[ 0 ] = first; len = 1; flagIn = true; // for ( in = getchar(); in != '\n'; in = getchar() , len++ ) while ( flag && flagIn ) { if ( scanf( "%c" , &in ) != EOF ) { if ( in != '\n' ) num[ len ] = in - '0'; else flagIn = false; } else flag = false; }} /* if ( scanf( "%c" , &first ) != EOF ) { first = first - '0'; flag = true; } else flag = false; }*/ void converse( char num[] , int const len ) { int i , temp; for ( i = 0; i <= len / 2; i++ ) { temp = num[ i ]; num[ i ] = num[ len - 1 - i ]; num[ len - 1 - i ] = temp; } } void numDi3( char num[] , int const len ) { int i , base , residual , digit; base = 3; for ( residual = 0 , i = len - 1 ; i >= 0 ; i-- ) { digit = residual * 10 + num[ i ]; residual = digit % base; num[ i ] = digit / base; } } void printfNum( char num[] , int const len ) { int i; if ( num[ len - 1 ] != 0 ) // printf( "%c" , num[ len - 1 ] ); putchar( num[ len - 1 ] + '0' ); for ( i = len - 2; i >= 0; i-- ) { putchar( num[ i ] + '0' ); } putchar( '\n' ); } int main(){ char num[ MAXLEN ] , first; int len; bool flag; first = getchar() - '0'; flag = true; while ( flag ) { scanfNum( num , len , first , flag ); converse( num , len ); numDi3( num , len ); printfNum( num , len ); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -