UVa 324 - Factorial Frequencies

来源:互联网 发布:中班美工剪纸 编辑:程序博客网 时间:2024/06/10 22:55

题目:计算n!每位上的数字出现的次数。

分析:简单题、模拟。大数计算,先计算大数阶乘,然后统计即可。

注意:366!有760位左右,注意数组大小。

#include <stdio.h>#include <stdlib.h>#include <string.h>int ans[ 201 ];int bit[ 10 ];void countbit( int f, int v ){if ( !f ) {while ( v ) {bit[v%10] ++;v /= 10;}}else {for ( int i = 0 ; i < 4 ; ++ i ) {bit[v%10] ++;v /= 10;}}}int main(){int N;while ( scanf("%d",&N) && N ) {memset( ans, 0, sizeof(ans) );memset( bit, 0, sizeof(bit) );ans[0] = 1;for ( int i = 2 ; i <= N ; ++ i ) {for ( int j = 0 ; j < 200 ; ++ j )ans[j] *= i;for ( int j = 0 ; j < 200 ; ++ j )if ( ans[j] >= 10000 ) {ans[j+1] += ans[j]/10000;ans[ j ] %= 10000;}}int end = 200;while ( end > 0 && !ans[end] ) -- end;countbit( 0, ans[end --] );while ( end >= 0 ) countbit( 1, ans[end --] );printf("%d! --\n",N);for ( int i = 0 ; i < 10 ; ++ i ) {printf("   (%d)%5d",i,bit[i]);if ( i%5 == 4 ) printf("\n");else printf(" ");}}return 0;}

原创粉丝点击