print_answer_*_( ) 是计算并打印答案的五个函数,其它函数(除了 main( ))都是辅助函数。
第三题假设千位数为第一位数。
若要以个位数为第一位数,把print_answer_3_( ) 里的 parity 的初值(目前是 1)设成偶数即可。
#include<stdio.h>
unsigned sumOfAllDigits( unsigned number ) {
unsigned sum = 0;
for( ; number; number /= 10 )
sum += number % 10;
return sum;
}
unsigned productOfAllDigits( unsigned number ) {
unsigned product = number ? 1 : 0;
for( ; number; number /= 10 )
product *= number % 10;
return product;
}
void print_answer_1_( ) {
int i = 0, count = 0;
for( ; i <= 60; i++ )
if( productOfAllDigits( i ) > sumOfAllDigits( i ) ) ++count;
printf( "--> %d\n", count );
}
void print_answer_2_( ) {
int i, count = 0;
for( i = 0; i <= 50; i++ )
if( productOfAllDigits( i ) < sumOfAllDigits( i ) ) ++count;
printf( "--> %d\n", count );
}
int isPerfectSquare( unsigned number ) {
unsigned base = 0;
for( ; base*base <= number; base++ )
if( base*base == number ) return 1;
return 0;
}
void print_answer_3_( ) {
int i, temp, parity, sum, product, count = 0;
for( i = 1000; i <= 9999; i++ ) {
if( isPerfectSquare( i ) ) {
sum = 0; product = 1; parity = 1;
for( temp = i; temp; temp /= 10, parity++ )
if ( parity % 2 == 0 ) sum += temp % 10;
else product *= temp % 10;
if( sum == 6 && product == 24 ) ++count;
}
}
printf( "--> %d\n", count );
}
void print_answer_4_( ) {
int i = 0, count = 0;
for( ; i <= 99; i++ )
if( productOfAllDigits( i ) <= sumOfAllDigits( i ) ) ++count;
printf( "--> %d\n", count );
}
void print_answer_5_( ) {
int i = 200, sum = 0;
for( ; i <= 2000; i++ )
if( i % 4 == 2 && i % 7 == 3 && i % 9 == 5 )
sum += i;
printf( "--> %d\n", sum );
}
void main( ) {
puts( "计算在0至60的范围内有多少个数,其每位数的乘积大于每位数的和。" );
print_answer_1_( );
puts( "\n\n计算在0至50的范围内有多少个数,其每位数的乘积小于每位数的和。" );
print_answer_2_( );
puts( "\n\n统计1000~9999之间的所有满足以下条件的四位数的个数:"
"该四位数是一个完全平方数,其第1、3位数字之和为6,第2、4位数字之积为24。" );
print_answer_3_( );
puts( "\n\n计算在0至99的范围内有多少个数,其每位数的乘积小于等于每位数的和。" );
print_answer_4_( );
puts( "\n\n求在200~2000之间所有能被4除余2,被7除余3,被9除余5的数之和。" );
print_answer_5_( );
}
温馨提示:答案为网友推荐,仅供参考