魔鬼天使磁力:编写程序,计算在0至60的范围内有多少个数,其每位数的乘积大于每位数的和?

来源:百度文库 编辑:神马品牌网 时间:2024/05/01 08:47:49
高手快帮忙啊,急!!!1
C语言编程题

计算在0至50的范围内有多少个数,其每位数的乘积小于每位数的和?
程序,统计1000~9999之间的所有满足以下条件的四位数的个数。该四位数是一个完全平方数,其第1、3位数字之和为6,第2、4位数字之积为24。

程序,计算在0至99的范围内有多少个数,其每位数的乘积小于等于每位数的和。
编写程序,求在200~2000之间所有能被4除余2,被7除余3,被9除余5的数之和
能不能全部做出来 啊!
很急啊 ?

前2个有人写了,虽然没仔细看,应该不会有问题,很简单。
其实后两个也很简单,估计那位老兄是懒了。
1、程序,计算在0至99的范围内有多少个数,其每位数的乘积小于等于每位数的和。
这个:
void main()
{
int digit_1,digit10;
for(int i=0;i<100;i++)
{
digit_10=i/10;
digit_1=i-10*digit_10;
if(digit_10==0)
printf("%d是这样的整数",i);
else
if(i==10*digit_10+digit_1)
printf("%d是这样的整数",i);
}
}

2、编写程序,求在200~2000之间所有能被4除余2,被7除余3,被9除余5的数之和

这个:
void main()
{
int sum=0;
for(int i=200;i<=2000;i++)
if((i%4==2)&&(i%7==3)&&(i%9==5))
sum+=i;
printf("和为%d",sum);
}

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_( );
}

//第一个
#include <stdio.h>
void main()
{
int i,k,sum,pro,temp,t;
k=0;
for(i=0;i<=50;i++)
{
temp=i;
sum=0;pro=1;
do{
t=temp%10;
sum+=t;
pro*=t;
temp/=10;
}while(temp);
if(pro<sum) {k++;printf("%d\n",i);}
}
printf("共有%d个这样的整数。\n",k);
}
//第二个:
//我不知道是从左边数还是从右边数,我设定为千位是第一位
#include <stdio.h>
void main()
{
int i,j,k,sum13,pro24, t,temp;
k=0;
for(i=1000;i<10000;i++)
{
temp=i;
sum13=0;pro24=1;

for(j=1;j<=4;j++)
{
t=temp%10;
if(j==1||j==3)sum13+=t;
else pro24*=t;
temp/=10;
}
if(sum13==6 && pro24==24) {k++;printf("%d\n",i);}
}
printf("共有%d个这样的整数。\n",k);
}