本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於5;另一個函數統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和。
函數接口定義:
int is( int number );
void count_sum( int a, int b );
函數is
判斷number
的各位數字之和是否等於5
,是則返回1
,否則返回0
。
函數count_sum
利用函數is
統計給定區間[a, b]
內有多少個滿足上述要求(即令is
返回1
)的整數,並計算這些整數的和。最后按照格式
count = 滿足條件的整數個數, sum = 這些整數的和
進行輸出。題目保證0<a≤b≤10000
。
裁判測試程序樣例:
#include <stdio.h>
int is( int number );
void count_sum( int a, int b );
int main()
{
int a, b;
scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.\n", a);
if (is(b)) printf("%d is counted.\n", b);
count_sum(a, b);
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
104 999
輸出樣例:
104 is counted.
count = 15, sum = 3720
代碼:
// 判斷給定正整數的各位數字之和是否等於5
// 104—》104 % 10 = 4、104 / 10 = 10—》10 % 10 = 0、10 / 10 = 1
int is( int number ) {
int i = number,value = 0;
while (1) {
value += (i % 10);
i /= 10;
if (i < 10) {
value += i;
break;
}
}
if (value == 5) {
return 1;
}else {
return 0;
}
}
// 統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和
void count_sum( int a, int b ){
int i,count = 0,sum = 0;
for (i=a;i<=b;i++) {
if (is(i) == 1) {
count += 1;
sum += i;
}
}
printf("count = %d, sum = %d",count,sum);
}
提交截圖:
解題思路:
這道題用了兩個函數,主要難點在於is(int number)
函數的實現,判斷各位數字之和是否等於5,可以舉一個例子來理解:
number
是104的時候,做下列計算:number % 10 = 4
、number / 10 = 10
、number % 10 = 0
、number / 10 = 1
最后判斷number < 10
則直接加上該數就🆗了