C++ 中求解区间 [L, R] 内数字之和等于 Y 的数字个数


我们给出两个数字 START 和 END 来定义一个数字范围。目标是在 [START,END] 范围内找到所有数字之和等于给定数字 Y 的数字。

我们将通过遍历从 START 到 END 的数字来实现这一点,并对每个数字使用 while 循环计算其数字之和。如果此和等于 Y,则递增计数。

让我们通过示例来理解。

输入 

START=10 END=20 Y=4

输出 

Numbers such that digit sum is equal to Y: 1

解释 

Number 13 has digit sum equal to 4.

输入 

START=10 END=50 Y=5

输出 

Numbers such that digit sum is equal to Y: 5

解释 

Numbers 14, 23, 32, 41 and 50 have digit sum 5.

下面程序中使用的思路如下

  • 我们获取整数 START、END、Y。

  • 函数 digitSum(int start, int end, int y) 返回数字之和等于 y 的数字个数

  • 将初始变量 count 设置为 0,表示此类数字的个数。

  • 将变量 digsum 设置为 0

  • 使用 for 循环遍历数字范围。i=start 到 i=end

  • 现在对于每个数字 num=i,使用 while 循环检查数字是否 >0。

  • 计算 digsum+=num%10。将 num=num/10 以添加下一个数字。

  • 在 while 循环结束时,检查 ( digsum == d )。如果为真,则递增 count。

  • 在所有循环结束时,count 将包含满足条件的数字总数。

  • 返回 count 作为结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int digitSum(int start, int end, int y){
   int count = 0;
   int digsum = 0;
   for (int i = start; i <= end; i++){
      int num=i;
      digsum=0;
      while(num>0){
         digsum+=num%10; //sum of digits
         num=num/10;
      }
      if(digsum==y) //original number is i{
         count++;
         //cout<<i<<" ";
      }
   }
   return count;
}
int main(){
   int START = 100;
   int END = 1000;
   int Y = 5;
   cout <<"Numbers such that digit sum is equal to Y: "<<digitSum(START,END,Y);
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出:

Numbers such that digit sum is equal to Y: 15

更新于: 2020年10月31日

258 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告